本文整理汇总了Python中qgis.core.QgsRasterLayer.isValid方法的典型用法代码示例。如果您正苦于以下问题:Python QgsRasterLayer.isValid方法的具体用法?Python QgsRasterLayer.isValid怎么用?Python QgsRasterLayer.isValid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsRasterLayer
的用法示例。
在下文中一共展示了QgsRasterLayer.isValid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: testImportIntoGpkg
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [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)
示例2: load_layer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def load_layer(layer_path):
"""Helper to load and return a single QGIS layer.
:param layer_path: Path name to raster or vector file.
:type layer_path: str
:returns: Layer instance.
:rtype: QgsMapLayer
"""
# Extract basename and absolute path
file_name = os.path.split(layer_path)[-1] # In case path was absolute
base_name, extension = os.path.splitext(file_name)
# Create QGis Layer Instance
if extension in ['.asc', '.tif']:
layer = QgsRasterLayer(layer_path, base_name)
elif extension in ['.shp']:
layer = QgsVectorLayer(layer_path, base_name, 'ogr')
else:
message = 'File %s had illegal extension' % layer_path
raise Exception(message)
# noinspection PyUnresolvedReferences
message = 'Layer "%s" is not valid' % layer.source()
# noinspection PyUnresolvedReferences
if not layer.isValid():
print message
# noinspection PyUnresolvedReferences
if not layer.isValid():
raise Exception(message)
return layer
示例3: testSetDataSource
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def testSetDataSource(self):
"""Test change data source"""
temp_dir = QTemporaryDir()
options = QgsDataProvider.ProviderOptions()
myPath = os.path.join(unitTestDataPath('raster'),
'band1_float32_noct_epsg4326.tif')
myFileInfo = QFileInfo(myPath)
myBaseName = myFileInfo.baseName()
layer = QgsRasterLayer(myPath, myBaseName)
renderer = QgsSingleBandGrayRenderer(layer.dataProvider(), 2)
image = layer.previewAsImage(QSize(400, 400))
self.assertFalse(image.isNull())
self.assertTrue(image.save(os.path.join(temp_dir.path(), 'expected.png'), "PNG"))
layer.setDataSource(myPath.replace('4326.tif', '4326-BAD_SOURCE.tif'), 'bad_layer', 'gdal', options)
self.assertFalse(layer.isValid())
image = layer.previewAsImage(QSize(400, 400))
self.assertTrue(image.isNull())
layer.setDataSource(myPath.replace('4326-BAD_SOURCE.tif', '4326.tif'), 'bad_layer', 'gdal', options)
self.assertTrue(layer.isValid())
image = layer.previewAsImage(QSize(400, 400))
self.assertFalse(image.isNull())
self.assertTrue(image.save(os.path.join(temp_dir.path(), 'actual.png'), "PNG"))
self.assertTrue(filecmp.cmp(os.path.join(temp_dir.path(), 'actual.png'), os.path.join(temp_dir.path(), 'expected.png')), False)
示例4: define_layer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def define_layer(self, layer_path):
"""Create QGIS layer (either vector or raster) from file path input.
:param layer_path: Full path to layer file.
:type layer_path: str
:return: QGIS layer.
:rtype: QgsMapLayer
"""
scenario_dir = self.source_directory.text()
joined_path = os.path.join(scenario_dir, layer_path)
full_path = os.path.normpath(joined_path)
file_name = os.path.split(layer_path)[-1]
# get extension and basename to create layer
base_name, extension = os.path.splitext(file_name)
# load layer in scenario
layer = QgsRasterLayer(full_path, base_name)
if layer.isValid():
return layer
else:
layer = QgsVectorLayer(full_path, base_name, 'ogr')
if layer.isValid():
return layer
# if layer is not vector nor raster
else:
LOGGER.warning('Input in scenario is not recognized/supported')
return
示例5: load
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def load(fileName, name=None, crs=None, style=None, isRaster=False):
"""
Loads a layer/table into the current project, given its file.
.. deprecated:: 3.0
Do not use, will be removed in QGIS 4.0
"""
from warnings import warn
warn("processing.load is deprecated and will be removed in QGIS 4.0", DeprecationWarning)
if fileName is None:
return
prjSetting = None
settings = QgsSettings()
if crs is not None:
prjSetting = settings.value('/Projections/defaultBehavior')
settings.setValue('/Projections/defaultBehavior', '')
if name is None:
name = os.path.split(fileName)[1]
if isRaster:
qgslayer = QgsRasterLayer(fileName, name)
if qgslayer.isValid():
if crs is not None and qgslayer.crs() is None:
qgslayer.setCrs(crs, False)
if style is None:
style = ProcessingConfig.getSetting(ProcessingConfig.RASTER_STYLE)
qgslayer.loadNamedStyle(style)
QgsProject.instance().addMapLayers([qgslayer])
else:
if prjSetting:
settings.setValue('/Projections/defaultBehavior', prjSetting)
raise RuntimeError(QCoreApplication.translate('dataobject',
'Could not load layer: {0}\nCheck the processing framework log to look for errors.').format(
fileName))
else:
qgslayer = QgsVectorLayer(fileName, name, 'ogr')
if qgslayer.isValid():
if crs is not None and qgslayer.crs() is None:
qgslayer.setCrs(crs, False)
if style is None:
if qgslayer.geometryType() == QgsWkbTypes.PointGeometry:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_POINT_STYLE)
elif qgslayer.geometryType() == QgsWkbTypes.LineGeometry:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_LINE_STYLE)
else:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_POLYGON_STYLE)
qgslayer.loadNamedStyle(style)
QgsProject.instance().addMapLayers([qgslayer])
if prjSetting:
settings.setValue('/Projections/defaultBehavior', prjSetting)
return qgslayer
示例6: load_layer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def load_layer(layer_path):
"""Helper to load and return a single QGIS layer
:param layer_path: Path name to raster or vector file.
:type layer_path: str
:returns: tuple containing layer and its layer_purpose.
:rtype: (QgsMapLayer, str)
"""
# Extract basename and absolute path
file_name = os.path.split(layer_path)[-1] # In case path was absolute
base_name, extension = os.path.splitext(file_name)
# Determine if layer is hazard or exposure
layer_purpose = 'undefined'
try:
try:
keywords = read_iso19115_metadata(layer_path)
except:
try:
keywords = read_file_keywords(layer_path)
keywords = write_read_iso_19115_metadata(layer_path, keywords)
except NoKeywordsFoundError:
keywords = {}
if 'layer_purpose' in keywords:
layer_purpose = keywords['layer_purpose']
except NoKeywordsFoundError:
pass
# Create QGis Layer Instance
if extension in ['.asc', '.tif']:
layer = QgsRasterLayer(layer_path, base_name)
elif extension in ['.shp']:
layer = QgsVectorLayer(layer_path, base_name, 'ogr')
else:
message = 'File %s had illegal extension' % layer_path
raise Exception(message)
# noinspection PyUnresolvedReferences
message = 'Layer "%s" is not valid' % layer.source()
# noinspection PyUnresolvedReferences
if not layer.isValid():
print message
# noinspection PyUnresolvedReferences
if not layer.isValid():
raise Exception(message)
return layer, layer_purpose
示例7: load_layer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def load_layer(layer_file, directory=TESTDATA):
"""Helper to load and return a single QGIS layer
:param layer_file: Path name to raster or vector file.
:type layer_file: str
:param directory: Optional parent dir. If None, path name is assumed
to be absolute.
:type directory: str, None
:returns: tuple containing layer and its category.
:rtype: (QgsMapLayer, str)
"""
# Extract basename and absolute path
file_path = os.path.split(layer_file)[-1] # In case path was absolute
base_name, extension = os.path.splitext(file_path)
if directory is None:
path = layer_file
else:
path = os.path.join(directory, layer_file)
keyword_path = path[:-4] + '.keywords'
# Determine if layer is hazard or exposure
keywords = read_file_keywords(keyword_path)
category = 'undefined'
if 'category' in keywords:
category = keywords['category']
message = 'Could not read %s' % keyword_path
assert keywords is not None, message
# Create QGis Layer Instance
if extension in ['.asc', '.tif']:
layer = QgsRasterLayer(path, base_name)
elif extension in ['.shp']:
layer = QgsVectorLayer(path, base_name, 'ogr')
else:
message = 'File %s had illegal extension' % path
raise Exception(message)
# noinspection PyUnresolvedReferences
message = 'Layer "%s" is not valid' % str(layer.source())
# noinspection PyUnresolvedReferences
if not layer.isValid():
print message
# noinspection PyUnresolvedReferences
assert layer.isValid(), message
return layer, category
示例8: load
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def load(fileName, name=None, crs=None, style=None, isRaster=False):
"""Loads a layer/table into the current project, given its file.
"""
if fileName is None:
return
prjSetting = None
settings = QSettings()
if crs is not None:
prjSetting = settings.value('/Projections/defaultBehaviour')
settings.setValue('/Projections/defaultBehaviour', '')
if name is None:
name = os.path.split(fileName)[1]
if isRaster:
qgslayer = QgsRasterLayer(fileName, name)
if qgslayer.isValid():
if crs is not None and qgslayer.crs() is None:
qgslayer.setCrs(crs, False)
if style is None:
style = ProcessingConfig.getSetting(ProcessingConfig.RASTER_STYLE)
qgslayer.loadNamedStyle(style)
QgsMapLayerRegistry.instance().addMapLayers([qgslayer])
iface.legendInterface().refreshLayerSymbology(qgslayer)
else:
if prjSetting:
settings.setValue('/Projections/defaultBehaviour', prjSetting)
raise RuntimeError('Could not load layer: ' + unicode(fileName)
+ '\nCheck the processing framework log to look for errors')
else:
qgslayer = QgsVectorLayer(fileName, name, 'ogr')
if qgslayer.isValid():
if crs is not None and qgslayer.crs() is None:
qgslayer.setCrs(crs, False)
if style is None:
if qgslayer.geometryType() == QGis.Point:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_POINT_STYLE)
elif qgslayer.geometryType() == QGis.Line:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_LINE_STYLE)
else:
style = ProcessingConfig.getSetting(ProcessingConfig.VECTOR_POLYGON_STYLE)
qgslayer.loadNamedStyle(style)
QgsMapLayerRegistry.instance().addMapLayers([qgslayer])
if prjSetting:
settings.setValue('/Projections/defaultBehaviour', prjSetting)
return qgslayer
示例9: generateLayer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def generateLayer(self, nameCoverage, coverageTime, boundingBox=None):
"""Generates a raster layer for QGIS.
:param nameCoverage: the name identifier of the coverage we want to retrieve.
:type nameCoverage: str
:param coverageTime: the time dimension of the coverage we want.
:type coverageTime: str
:returns: a QGIS-compatible raster layer object for the coverage and times provided.
:rtype: QgsRasterLayer
"""
url = self.generateURLForGeoTIFF(nameCoverage, coverageTime, boundingBox)
layerName = "{ct}_{nc}-{id}".format(ct=coverageTime, nc=nameCoverage, id=uuid.uuid4())
if Utilities.is_linux():
import requests
with tempfile.NamedTemporaryFile(suffix=".tiff", delete=False) as f:
r = requests.get(url, stream=True)
with open(f.name, "wb") as g:
for chunk in r.iter_content():
g.write(chunk)
layer = QgsRasterLayer(f.name, layerName)
else:
layer = QgsRasterLayer(url, layerName)
if layer.isValid():
return layer
else:
msg = "Couldn't create a valid layer."
self.standardMessage.emit(msg)
示例10: loadLayer
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def loadLayer(theLayerFile):
"""Helper to load and return a single QGIS layer"""
# Extract basename and absolute path
myBaseName, myExt = os.path.splitext(theLayerFile)
myPath = os.path.join(TESTDATA, theLayerFile)
myKeywordPath = myPath[:-4] + '.keywords'
# Determine if layer is hazard or exposure
myKeywords = read_keywords(myKeywordPath)
myType = 'undefined'
if 'category' in myKeywords:
myType = myKeywords['category']
msg = 'Could not read %s' % myKeywordPath
assert myKeywords is not None, msg
# Create QGis Layer Instance
if myExt in ['.asc', '.tif']:
myLayer = QgsRasterLayer(myPath, myBaseName)
elif myExt in ['.shp']:
myLayer = QgsVectorLayer(myPath, myBaseName, 'ogr')
else:
myMessage = 'File %s had illegal extension' % myPath
raise Exception(myMessage)
myMessage = 'Layer "%s" is not valid' % str(myLayer.source())
assert myLayer.isValid(), myMessage
return myLayer, myType
示例11: test_clip_raster
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def test_clip_raster(self):
"""Raster layers can be clipped."""
# Create a raster layer
layer_name = 'shake'
raster_layer = QgsRasterLayer(RASTERPATH, layer_name)
message = (
'Did not find layer "%s" in path "%s"' % (layer_name, RASTERPATH))
assert raster_layer is not None, message
# Create a bounding box
bounding_box = [97, -3, 104, 1]
# Clip the vector to the bbox
result = clip_layer(raster_layer, bounding_box)
# Check the output is valid
assert os.path.exists(result.source())
# Clip and give a desired resolution for the output
# big pixel size
size = 0.05
result = clip_layer(raster_layer, bounding_box, size)
new_raster_layer = QgsRasterLayer(result.source(), layer_name)
assert new_raster_layer.isValid(), 'Resampled raster is not valid'
message = (
'Resampled raster has incorrect pixel size. Expected: %5f, '
'Actual: %5f' % (size, new_raster_layer.rasterUnitsPerPixelX()))
assert new_raster_layer.rasterUnitsPerPixelX() == size, message
示例12: accept
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def accept(self):
"""Creates and loads the WMS layer."""
self.close()
currentIndex = self.comboBoxLayer.currentIndex()
currentLayerId, unused_dataType = self.comboBoxLayer.itemData(currentIndex)
currentLayerName = unicode(self.comboBoxLayer.currentText())
mapId = self.labelMapId.text()
# Create the WMS layer
token = oauth2_utils.getToken()
url = 'https://mapsengine.google.com/%s-4/wms/%s/'
wmsUrl = url % (mapId, token.access_token)
currentFormatIndex = self.comboBoxFormat.currentIndex()
imageFormat = unicode(self.comboBoxFormat.itemData(currentFormatIndex))
crs = self.comboBoxCrs.currentText()
uri = QgsDataSourceURI()
uri.setParam('url', wmsUrl)
uri.setParam('layers', currentLayerId)
uri.setParam('format', imageFormat)
uri.setParam('crs', crs)
uri.setParam('styles', '')
rlayer = QgsRasterLayer(str(uri.encodedUri()), currentLayerName, 'wms')
if rlayer.isValid():
QgsMapLayerRegistry.instance().addMapLayer(rlayer)
else:
logText = 'Failed to add WMS layer %s with URI %s' % (
currentLayerName, str(uri.encodedUri()))
warnText = 'Failed to add WMS layer %s' % currentLayerName
QgsMessageLog.logMessage(logText, 'GMEConnector', QgsMessageLog.CRITICAL)
self.iface.messageBar().pushMessage(
'Google Maps Engine Connector', warnText,
level=QgsMessageBar.CRITICAL, duration=3)
示例13: testIdentify
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def testIdentify(self):
myPath = os.path.abspath(os.path.join(__file__, '..', '..', '..', 'testdata', 'landsat.tif'))
myFileInfo = QFileInfo(myPath)
myBaseName = myFileInfo.baseName()
myRasterLayer = QgsRasterLayer(myPath, myBaseName)
myMessage = 'Raster not loaded: %s' % myPath
assert myRasterLayer.isValid(), myMessage
myPoint = QgsPoint(786690, 3345803)
#print 'Extents: %s' % myRasterLayer.extent().toString()
myResult, myRasterValues = myRasterLayer.identify(myPoint)
assert myResult
# Get the name of the first band
myBandName = myRasterValues.keys()[0]
myExpectedName = QString('Band 1')
myMessage = 'Expected "%s" got "%s" for first raster band name' % (
myExpectedName, myBandName)
assert myExpectedName == myBandName, myMessage
# Convert each band value to a list of ints then to a string
myValues = myRasterValues.values()
myIntValues = []
for myValue in myValues:
myIntValues.append(int(str(myValue)))
myValues = str(myIntValues)
myExpectedValues = '[127, 141, 112, 72, 86, 126, 156, 211, 170]'
myMessage = 'Expected: %s\nGot: %s' % (myValues, myExpectedValues)
self.assertEquals(myValues, myExpectedValues, myMessage)
示例14: addToCanvas
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def addToCanvas(self, roles):
if self.canOpen(roles):
if not oauth2_supported:
iface.messageBar().pushMessage(
"Cannot load basemap",
"OAuth support is not available",
QgsMessageBar.WARNING)
else:
authcfg = get_oauth_authcfg()
if authcfg is None:
iface.messageBar().pushMessage(
"Cannot load basemap",
"Cannot find a valid authentication configuration",
QgsMessageBar.WARNING)
else:
authId = authcfg.id()
layer = QgsRasterLayer('authcfg={authcfg}&type=xyz&url={url}'.format(url=urllib2.quote("{}?version={}".format(self.url, pluginSetting("apiVersion"))),
authcfg=authId), self.name, "wms")
if layer.isValid():
QgsMapLayerRegistry.instance().addMapLayer(layer)
else:
iface.messageBar().pushMessage(
"Cannot load basemap",
"Cannot create basemap layer",
QgsMessageBar.WARNING)
else:
webbrowser.open_new(SUBSCRIBE_URL)
示例15: generateLayerFromGeoTIFFURL
# 需要导入模块: from qgis.core import QgsRasterLayer [as 别名]
# 或者: from qgis.core.QgsRasterLayer import isValid [as 别名]
def generateLayerFromGeoTIFFURL(self, geoTiffUrl, layerName):
"""Generates a new layer based on the GeoTIFF URL provided for the WCS service.
This method also appends to the name an UUID so the uniqueness of it's name
and ID is guaranteed to avoid problems when managing asynchronous generation
of layers between different processes.
:param geoTiffUrl: the download URL for this image.
:type geoTiffUrl: str
:param layerName: the name to give to this layer. The resultant layer will have an UUID appended.
:type layerName: str
"""
tiff_string = "{ln}{id}".format(ln=layerName, id=uuid.uuid4())
layer = QgsRasterLayer(geoTiffUrl, tiff_string)
if Utilities.is_linux():
import requests
with tempfile.NamedTemporaryFile(suffix=".tiff", delete=False) as f:
r = requests.get(geoTiffUrl, stream=True)
with open(f.name, "wb") as g:
for chunk in r.iter_content():
g.write(chunk)
layer = QgsRasterLayer(f.name, layerName)
else:
layer = QgsRasterLayer(geoTiffUrl, layerName)
if layer.isValid():
return layer
else:
msg = "Couldn't create a valid layer."
self.standardMessage.emit(msg)