本文整理汇总了Python中qgis.core.QgsRasterFileWriter.writeRaster方法的典型用法代码示例。如果您正苦于以下问题:Python QgsRasterFileWriter.writeRaster方法的具体用法?Python QgsRasterFileWriter.writeRaster怎么用?Python QgsRasterFileWriter.writeRaster使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsRasterFileWriter
的用法示例。
在下文中一共展示了QgsRasterFileWriter.writeRaster方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: read_from_qgis_native
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def read_from_qgis_native(self, qgis_layer):
"""Read raster data from qgis layer QgsRasterLayer.
A stub is used now:
save all data in a file,
then call safe.read_from_file
Raises:
* TypeError if qgis is not avialable
* IOError if can't store temporary file
* GetDataError if can't create copy of qgis_layer's
dataProvider
"""
base_name = unique_filename()
file_name = base_name + '.tif'
file_writer = QgsRasterFileWriter(file_name)
pipe = QgsRasterPipe()
provider = qgis_layer.dataProvider()
if not pipe.set(provider.clone()):
msg = "Cannot set pipe provider"
raise GetDataError(msg)
file_writer.writeRaster(
pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs())
# Write keywords if any
write_keywords(self.keywords, base_name + '.keywords')
self.read_from_file(file_name)
示例2: convertUnsupportedFormats
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def convertUnsupportedFormats(self, progress):
i = 0
progress.setText(self.tr("Converting outputs"))
for out in self.outputs:
if isinstance(out, OutputVector):
if out.compatible is not None:
layer = dataobjects.getObjectFromUri(out.compatible)
if layer is None:
# For the case of memory layer, if the
# getCompatible method has been called
continue
provider = layer.dataProvider()
writer = out.getVectorWriter(provider.fields(), provider.geometryType(), layer.crs())
features = vector.features(layer)
for feature in features:
writer.addFeature(feature)
elif isinstance(out, OutputRaster):
if out.compatible is not None:
layer = dataobjects.getObjectFromUri(out.compatible)
provider = layer.dataProvider()
writer = QgsRasterFileWriter(out.value)
format = self.getFormatShortNameFromFilename(out.value)
writer.setOutputFormat(format)
writer.writeRaster(layer.pipe(), layer.width(), layer.height(), layer.extent(), layer.crs())
elif isinstance(out, OutputTable):
if out.compatible is not None:
layer = dataobjects.getObjectFromUri(out.compatible)
provider = layer.dataProvider()
writer = out.getTableWriter(provider.fields())
features = vector.features(layer)
for feature in features:
writer.addRecord(feature)
progress.setPercentage(100 * i / float(len(self.outputs)))
示例3: clip_raster
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def clip_raster(raster, column_count, row_count, output_extent):
"""Clip raster to specified extent, width and height.
Note there is similar utility in safe_qgis.utilities.clipper, but it uses
gdal whereas this one uses native QGIS.
:param raster: Raster
:type raster: QgsRasterLayer
:param column_count: Desired width in pixels of new raster
:type column_count: Int
:param row_count: Desired height in pixels of new raster
:type row_count: Int
:param output_extent: Extent of the clipped region
:type output_extent: QgsRectangle
:returns: Clipped region of the raster
:rtype: QgsRasterLayer
"""
provider = raster.dataProvider()
pipe = QgsRasterPipe()
pipe.set(provider.clone())
base_name = unique_filename()
file_name = base_name + ".tif"
file_writer = QgsRasterFileWriter(file_name)
file_writer.writeRaster(pipe, column_count, row_count, output_extent, raster.crs())
return QgsRasterLayer(file_name, "clipped_raster")
示例4: raster_to_file
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def raster_to_file(self, layer, filename):
'''
write the contents of the raster-layer to a file (tif)
'''
extent = layer.extent()
width, height = layer.width(), layer.height()
pipe = QgsRasterPipe()
# setting renderer leads to export as rendered image (strange: causes conversion from grayscale to multicolor with 4 bands)
# else raw data is written (in grayscale)
#renderer = layer.renderer()
provider = layer.dataProvider()
#pipe.set(renderer.clone())
pipe.set(provider.clone())
# another possible way to pipe (take the referenced one), references the renderer as well
# -> causes wrong color bands while exporting (see some lines above)
#pipe = layer.pipe()
file_writer = QgsRasterFileWriter(filename)
file_writer.writeRaster(pipe,
width,
height,
extent,
layer.crs())
示例5: _add_raster_layer
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def _add_raster_layer(self, raster_layer, layer_name, save_style=False):
"""Add a raster layer to the folder.
:param raster_layer: The layer to add.
:type raster_layer: QgsRasterLayer
:param layer_name: The name of the layer in the datastore.
:type layer_name: str
:param save_style: If we have to save a QML too. Default to False.
:type save_style: bool
:returns: A two-tuple. The first element will be True if we could add
the layer to the datastore. The second element will be the layer
name which has been used or the error message.
:rtype: (bool, str)
.. versionadded:: 4.0
"""
if not self.is_writable():
return False, 'The destination is not writable.'
output = QFileInfo(self.uri.filePath(layer_name + '.tif'))
source = QFileInfo(raster_layer.source())
if source.exists() and source.suffix() in ['tiff', 'tif']:
# If it's tiff file based.
QFile.copy(source.absoluteFilePath(), output.absoluteFilePath())
else:
# If it's not file based.
renderer = raster_layer.renderer()
provider = raster_layer.dataProvider()
crs = raster_layer.crs()
pipe = QgsRasterPipe()
pipe.set(provider.clone())
pipe.set(renderer.clone())
file_writer = QgsRasterFileWriter(output.absoluteFilePath())
file_writer.Mode(1)
file_writer.writeRaster(
pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
crs)
del file_writer
if save_style:
style_path = QFileInfo(self.uri.filePath(layer_name + '.qml'))
raster_layer.saveNamedStyle(style_path.absoluteFilePath())
assert output.exists()
return True, output.baseName()
示例6: polygonize_gdal
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def polygonize_gdal(
raster,
threshold_min=0.0,
threshold_max=float('inf')):
"""
Function to polygonize raster. Areas (pixels) with threshold_min <
pixel_values < threshold_max will be converted to polygons.
:param raster: Raster layer
:type raster: QgsRasterLayer
:param threshold_min: Value that splits raster to flooded or not flooded.
:type threshold_min: float
:param threshold_max: Value that splits raster to flooded or not flooded.
:type threshold_max: float
:returns: Polygonal geometry
:rtype: QgsGeometry
"""
# save qgis raster to disk
base_name = unique_filename()
file_name = base_name + '.tif'
file_writer = QgsRasterFileWriter(file_name)
pipe = QgsRasterPipe()
provider = raster.dataProvider()
if not pipe.set(provider.clone()):
msg = "Cannot set pipe provider"
raise GetDataError(msg)
file_writer.writeRaster(
pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs())
(
inside_file_name,
inside_layer_name,
outside_file_name,
outside_layer_name
) = polygonize_thresholds(file_name, threshold_min, threshold_max)
inside_layer = \
QgsVectorLayer(inside_file_name, inside_layer_name, 'ogr')
outside_layer = \
QgsVectorLayer(outside_file_name, outside_layer_name, 'ogr')
if inside_layer.featureCount() == 0:
return None, None
else:
return inside_layer, outside_layer
示例7: run_raster_upload
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def run_raster_upload(self):
# The selected layer should be a raster layer.
layer = self.iface.activeLayer()
if not isinstance(layer, QgsRasterLayer):
pop_up_info("Error: you must select the raster layer")
return
fd, tiff_filename = tempfile.mkstemp(suffix='.tiff')
os.close(fd)
# ^^^ We just want the filename, not the opened file descriptor.
provider = layer.dataProvider()
pipe = QgsRasterPipe()
pipe.set(provider.clone())
file_writer = QgsRasterFileWriter(tiff_filename)
file_writer.writeRaster(pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs())
# http://build-failed.blogspot.nl/2014/12/splitting-vector-and-raster-files-in.html
# print(tiff_filename)
# Optionally TODO: grab title from dialog.
title = "Uploaded by the qgis plugin on %s" % (
datetime.datetime.now().isoformat())
form = urllib2_upload.MultiPartForm()
form.add_field('title', title)
form.add_field('organisation_id', str(self.selected_organisation))
filename = os.path.basename(tiff_filename)
form.add_file('raster_file', filename, fileHandle=open(tiff_filename, 'rb'))
request = urllib2.Request('https://ggmn.un-igrac.org/upload_raster/')
request.add_header('User-agent', 'qgis ggmn uploader')
request.add_header('username', self.username)
request.add_header('password', self.password)
body = str(form)
request.add_header('Content-type', form.get_content_type())
request.add_header('Content-length', len(body))
# print("content-length: %s" % len(body))
request.add_data(body)
fd2, logfile = tempfile.mkstemp(prefix="uploadlog", suffix=".txt")
open(logfile, 'w').write(request.get_data())
# print("Printed what we'll send to %s" % logfile)
answer = urllib2.urlopen(request).read()
# print(answer)
# print("Uploaded geotiff to the server")
pop_up_info("Uploaded geotiff to the server")
示例8: testImportIntoGpkg
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def testImportIntoGpkg(self):
# init target file
test_gpkg = tempfile.mktemp(suffix='.gpkg', dir=self.testDataDir)
gdal.GetDriverByName('GPKG').Create(test_gpkg, 1, 1, 1)
source = QgsRasterLayer(os.path.join(self.testDataDir, 'raster', 'band3_byte_noct_epsg4326.tif'), 'my', 'gdal')
self.assertTrue(source.isValid())
provider = source.dataProvider()
fw = QgsRasterFileWriter(test_gpkg)
fw.setOutputFormat('gpkg')
fw.setCreateOptions(['RASTER_TABLE=imported_table', 'APPEND_SUBDATASET=YES'])
pipe = QgsRasterPipe()
self.assertTrue(pipe.set(provider.clone()))
projector = QgsRasterProjector()
projector.setCrs(provider.crs(), provider.crs())
self.assertTrue(pipe.insert(2, projector))
self.assertEqual(fw.writeRaster(pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs()), 0)
# Check that the test geopackage contains the raster layer and compare
rlayer = QgsRasterLayer('GPKG:%s:imported_table' % test_gpkg)
self.assertTrue(rlayer.isValid())
out_provider = rlayer.dataProvider()
self.assertEqual(provider.block(1, provider.extent(), source.width(), source.height()).data(),
out_provider.block(1, out_provider.extent(), rlayer.width(), rlayer.height()).data())
# remove result file
os.unlink(test_gpkg)
示例9: write
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def write(self, theRasterName):
print theRasterName
path = "%s/%s" % (self.testDataDir, theRasterName)
# myFileInfo = QFileInfo( path )
# myBaseName = myFileInfo.baseName()
rasterLayer = QgsRasterLayer(path, "test")
if not rasterLayer.isValid():
return False
provider = rasterLayer.dataProvider()
tmpFile = QTemporaryFile()
tmpFile.open() # fileName is no avialable until open
tmpName = tmpFile.fileName()
tmpFile.close()
# do not remove when class is destroyd so that we can read the file and see difference
tmpFile.setAutoRemove(False)
fileWriter = QgsRasterFileWriter(tmpName)
pipe = QgsRasterPipe()
if not pipe.set(provider.clone()):
print "Cannot set pipe provider"
return False
# nuller = QgsRasterNuller()
# nuller.setNoData( ... )
# if not pipe.insert( 1, nuller ):
# print "Cannot set pipe nuller"
# return False
projector = QgsRasterProjector()
projector.setCRS(provider.crs(), provider.crs())
if not pipe.insert(2, projector):
print "Cannot set pipe projector"
return False
fileWriter.writeRaster(pipe, provider.xSize(), provider.ySize(), provider.extent(), provider.crs())
checker = QgsRasterChecker()
ok = checker.runTest("gdal", tmpName, "gdal", path)
self.report += checker.report()
# All OK, we can delete the file
tmpFile.setAutoRemove(ok)
return ok
示例10: exportRasterLayer
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def exportRasterLayer(self, layer, destinationFile, options=None):
outputFormat = self.settings['rasterFormat'] if 'rasterFormat' in self.settings else 'GTiff'
if os.path.splitext(destinationFile)[1] == '':
formats = QgsRasterFileWriter.extensionsForFormat(outputFormat)
if len(formats) > 0:
destinationFile = '{}.{}'.format(destinationFile, formats[0])
provider = layer.dataProvider()
cols = provider.xSize()
rows = provider.ySize()
if not provider.capabilities() & QgsRasterDataProvider.Size:
k = float(provider.extent().width()) / float(provider.extent().height())
cols = RASTER_SIZE * k
rows = RASTER_SIZE
pipe = QgsRasterPipe()
if not pipe.set(provider.clone()):
QgsMessageLog.logMessage(self.tr('Failed to export layer "{layer}": Cannot set pipe provider.'.format(layer=layer.name())), 'QConsolidate', Qgis.Warning)
return False, None
nodata = {}
for i in range(1, provider.bandCount() + 1):
if provider.sourceHasNoDataValue(i):
value = provider.sourceNoDataValue(i)
nodata[i] = QgsRasterRange(value, value)
nuller = QgsRasterNuller()
for band, value in nodata.items():
nuller.setNoData(band, [value])
if not pipe.insert(1, nuller):
QgsMessageLog.logMessage(self.tr('Failed to export layer "{layer}": Cannot set pipe nuller.'.format(layer=layer.name())), 'QConsolidate', Qgis.Warning)
return False, None
writer = QgsRasterFileWriter(destinationFile)
writer.setOutputFormat(outputFormat)
if options is not None:
writer.setCreateOptions(options)
success = True
error = writer.writeRaster(pipe, cols, rows, provider.extent(), provider.crs())
if error != QgsRasterFileWriter.NoError:
QgsMessageLog.logMessage(self.tr('Failed to export layer "{layer}": {message}.'.format(layer=layer.name(), message=error)), 'QConsolidate', Qgis.Warning)
success = False
return success, destinationFile
示例11: test02_SaveAsGeoTIFF
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def test02_SaveAsGeoTIFF(self):
"""Save raster layer as a GeoTIFF file"""
self._testAvailable() or self.skipTest("Not available")
layer = self._testLayer(self.fileName)
# write to a disk
# ref. to the InaSAFE plugin
provider = layer.dataProvider()
pipe = QgsRasterPipe()
assert pipe.set(provider.clone()), "cannot set provider to pipe"
outfile = self._testDataPath(self.fileName, output=True)
writer = QgsRasterFileWriter(outfile)
assert not writer.writeRaster(pipe, provider.xSize(), provider.ySize(), provider.extent(), provider.crs()), "failed to write"
assert os.path.exists(outfile), "output file cannot be found"
示例12: extractRasterLayer
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def extractRasterLayer(self, tempDir):
"""Extract the raster from the current layer to a temporary GeoTiff file.
Extracts a geotiff file that can be uploaded to maps engine. This approach
ensures that we are able to upload any layer that QGIS has ability to read.
Args:
tempDir: str, path of directory where to extract the shapefile.
Returns:
a dictionary with file names as keys and file path as values.
"""
layerName = unicode(self.lineEditLayerName.text())
tempTifPath = os.path.join(tempDir, layerName + '.tif')
currentLayer = self.iface.mapCanvas().currentLayer()
self.iface.messageBar().pushMessage(
'Google Maps Engine Connector',
'Extracting data to a temporary geotiff file. Please wait...',
level=QgsMessageBar.INFO)
QCoreApplication.processEvents()
pipe = QgsRasterPipe()
provider = currentLayer.dataProvider()
pipe.set(provider.clone())
rasterWriter = QgsRasterFileWriter(tempTifPath)
xSize = provider.xSize()
ySize = provider.ySize()
if xSize and ySize:
error = rasterWriter.writeRaster(
pipe, xSize, ySize, provider.extent(), provider.crs())
if error != QgsRasterFileWriter.NoError:
QgsMessageLog.logMessage(error, 'GMEConnector',
QgsMessageLog.CRITICAL)
return
else:
return
filesToUpload = {}
fileName = layerName + '.tif'
filePath = os.path.join(tempDir, fileName)
filesToUpload[fileName] = filePath
return filesToUpload
示例13: _testGeneratePyramids
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def _testGeneratePyramids(self, pyramidFormat):
tmpName = tempfile.mktemp(suffix='.tif')
source = QgsRasterLayer(os.path.join(self.testDataDir, 'raster', 'byte.tif'), 'my', 'gdal')
self.assertTrue(source.isValid())
provider = source.dataProvider()
fw = QgsRasterFileWriter(tmpName)
fw.setBuildPyramidsFlag(QgsRaster.PyramidsFlagYes)
fw.setPyramidsFormat(pyramidFormat)
fw.setPyramidsList([2])
pipe = QgsRasterPipe()
self.assertTrue(pipe.set(provider.clone()))
projector = QgsRasterProjector()
projector.setCrs(provider.crs(), provider.crs())
self.assertTrue(pipe.insert(2, projector))
self.assertEqual(fw.writeRaster(pipe,
provider.xSize(),
provider.ySize(),
provider.extent(),
provider.crs()), 0)
del fw
ds = gdal.Open(tmpName)
self.assertEqual(ds.GetRasterBand(1).GetOverviewCount(), 1)
fl = ds.GetFileList()
if pyramidFormat == QgsRaster.PyramidsGTiff:
self.assertEqual(len(fl), 2, fl)
self.assertIn('.ovr', fl[1])
elif pyramidFormat == QgsRaster.PyramidsInternal:
self.assertEqual(len(fl), 1, fl)
elif pyramidFormat == QgsRaster.PyramidsErdas:
self.assertEqual(len(fl), 2, fl)
self.assertIn('.aux', fl[1])
os.unlink(tmpName)
示例14: exportRaster
# 需要导入模块: from qgis.core import QgsRasterFileWriter [as 别名]
# 或者: from qgis.core.QgsRasterFileWriter import writeRaster [as 别名]
def exportRaster(layer, count, layersFolder, feedback, iface, matchCRS):
feedback.showFeedback("Exporting %s to PNG..." % layer.name())
name_ts = (safeName(layer.name()) + unicode(count) +
unicode(int(time.time())))
# We need to create a new file to export style
piped_file = os.path.join(tempfile.gettempdir(), name_ts + '_piped.tif')
piped_extent = layer.extent()
piped_width = layer.height()
piped_height = layer.width()
piped_crs = layer.crs()
piped_renderer = layer.renderer()
piped_provider = layer.dataProvider()
pipe = QgsRasterPipe()
pipe.set(piped_provider.clone())
pipe.set(piped_renderer.clone())
file_writer = QgsRasterFileWriter(piped_file)
file_writer.writeRaster(pipe, piped_height, -1, piped_extent, piped_crs)
# Export layer as PNG
out_raster = os.path.join(layersFolder, safeName(layer.name()) + "_" +
unicode(count) + ".png")
projectCRS = iface.mapCanvas().mapSettings().destinationCrs()
if not (matchCRS and layer.crs() == projectCRS):
# Extent of the layer in EPSG:3857
crsSrc = layer.crs()
crsDest = QgsCoordinateReferenceSystem(3857)
try:
xform = QgsCoordinateTransform(crsSrc, crsDest,
QgsProject.instance())
except:
xform = QgsCoordinateTransform(crsSrc, crsDest)
extentRep = xform.transformBoundingBox(layer.extent())
extentRepNew = ','.join([unicode(extentRep.xMinimum()),
unicode(extentRep.xMaximum()),
unicode(extentRep.yMinimum()),
unicode(extentRep.yMaximum())])
# Reproject in 3857
piped_3857 = os.path.join(tempfile.gettempdir(),
name_ts + '_piped_3857.tif')
qgis_version = Qgis.QGIS_VERSION
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
try:
processing.algorithmHelp("gdal:warpreproject")
except:
pass
sys.stdout = old_stdout
params = {
"INPUT": piped_file,
"SOURCE_CRS": layer.crs().authid(),
"TARGET_CRS": "EPSG:3857",
"NODATA": 0,
"TARGET_RESOLUTION": 0,
"RESAMPLING": 2,
"TARGET_EXTENT": extentRepNew,
"EXT_CRS": "EPSG:3857",
"TARGET_EXTENT_CRS": "EPSG:3857",
"DATA_TYPE": 0,
"COMPRESS": 4,
"JPEGCOMPRESSION": 75,
"ZLEVEL": 6,
"PREDICTOR": 1,
"TILED": False,
"BIGTIFF": 0,
"TFW": False,
"MULTITHREADING": False,
"COPY_SUBDATASETS": False,
"EXTRA": "",
"OUTPUT": piped_3857
}
warpArgs = {}
lines = mystdout.getvalue()
for count, line in enumerate(lines.split("\n")):
if count != 0 and ":" in line:
try:
k = line.split(":")[0]
warpArgs[k] = params[k]
except:
pass
try:
processing.run("gdal:warpreproject", warpArgs)
except:
shutil.copyfile(piped_file, piped_3857)
try:
processing.run("gdal:translate", {"INPUT": piped_3857,
"OUTSIZE": 100,
#.........这里部分代码省略.........