本文整理汇总了Python中qgis.core.QgsVectorLayer.setCustomProperty方法的典型用法代码示例。如果您正苦于以下问题:Python QgsVectorLayer.setCustomProperty方法的具体用法?Python QgsVectorLayer.setCustomProperty怎么用?Python QgsVectorLayer.setCustomProperty使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsVectorLayer
的用法示例。
在下文中一共展示了QgsVectorLayer.setCustomProperty方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: loadLayerTable
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def loadLayerTable(self, carhabLayer, tableName):
# Retrieve layer from provider.
uri = QgsDataSourceURI()
uri.setDatabase(carhabLayer.dbPath)
schema = ''
geom_column = 'the_geom'
uri.setDataSource(schema, tableName, geom_column)
display_name = carhabLayer.getName()+'_'+tableName
layer = QgsVectorLayer(uri.uri(), display_name, 'spatialite')
crsType = QgsCoordinateReferenceSystem.EpsgCrsId
crsVal = 2154
crs = QgsCoordinateReferenceSystem(crsVal, crsType)
layer.setCrs(crs)
# "Bind" layer to carhab layer.
if self.getCarhabLayerByDbPath(carhabLayer.dbPath):
layer.setCustomProperty('carhabLayer', carhabLayer.id)
# Add layer to map (False to add to group)
QgsMapLayerRegistry.instance().addMapLayer(layer, False)
iface.mapCanvas().setExtent(layer.extent())
return layer
示例2: _create_layer
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def _create_layer(self, type, srid, attributes, title, tag):
"""
Creates an empty spatialite layer
:param type: 'Point', 'LineString', 'Polygon', etc.
:param srid: CRS ID of the layer
:param attributes: list of (attribute_name, attribute_type, attribute_typename)
:param title: title of the layer
"""
driver = ogr.GetDriverByName('GPKG')
fn = "{}_{}.gpkg".format(self.output_local_file, tag)
ds = driver.CreateDataSource(fn)
layer = ds.CreateLayer("meta", geom_type = ogr.wkbNone)
layer.CreateField(ogr.FieldDefn('key', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('value', ogr.OFTString))
if srid:
wkbType = { 'point': ogr.wkbPoint25D,
'multipoint': ogr.wkbMultiPoint25D,
'linestring': ogr.wkbLineString25D,
'multilinestring': ogr.wkbMultiLineString25D,
'polygon': ogr.wkbPolygon25D,
'multipolygon': ogr.wkbMultiPolygon25D,
'compoundcurve': ogr.wkbCompoundCurveZ,
'curvepolygon': ogr.wkbCurvePolygonZ,
'multicurve': ogr.wkbMultiCurveZ,
'multisurface': ogr.wkbMultiSurfaceZ
}[type]
srs = osr.SpatialReference()
srs.ImportFromEPSGA(int(srid))
else:
wkbType = ogr.wkbNone
srs = None
layer = ds.CreateLayer("data", srs, wkbType, ['FID=id'])
layer.CreateField(ogr.FieldDefn('id', ogr.OFTInteger64))
layer.CreateField(ogr.FieldDefn('fid', ogr.OFTString))
layer.CreateField(ogr.FieldDefn('_xml_', ogr.OFTString))
att_type_map = {QVariant.String : ogr.OFTString,
QVariant.Int : ogr.OFTInteger,
QVariant.Double: ogr.OFTReal,
QVariant.DateTime: ogr.OFTDateTime}
for aname, atype in attributes:
layer.CreateField(ogr.FieldDefn(aname, att_type_map[atype]))
# update fields
layer.ResetReading()
del layer
del ds
qgs_layer = QgsVectorLayer("{}|layername=data".format(fn), title, "ogr")
qgs_layer.setCustomProperty("tag", tag)
return qgs_layer
示例3: createLayer
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def createLayer(self):
'''Create a layer with the required attributes and add the layer to the canvas.
The database is taken from database combobox. The database needs to be registered.
'''
sql = u'create table ' + self.quotedIdentifier(self.leLayerName.text()) + '('
sql += u'pkuid integer primary key autoincrement,'
sql += u'name text,description text,class text, timestamp text)'
sqlGeom = u'select AddGeometryColumn(%s,%s,%d,%s,2)' % (self.quotedValue(self.leLayerName.text()),
self.quotedValue('Geometry'),
4326,
self.quotedValue('POINT'))
sqlIndex = u'select CreateSpatialIndex(%s,%s)' % (self.quotedValue(self.leLayerName.text()),
self.quotedValue('Geometry'))
try:
db = sqlite.connect(self.mDatabaseComboBox.currentText())
cur = db.cursor()
cur.execute(sql)
cur.execute(sqlGeom)
cur.execute(sqlIndex)
db.commit()
db.close()
except:
self.iface.messageBar().pushMessage(self.tr("SpatiaLite Database"), self.tr("Could not create a new layer!"),
level=QgsMessageBar.CRITICAL, duration=5)
return
uri = QgsDataSourceURI()
uri.setDatabase(self.mDatabaseComboBox.currentText())
schema = ''
table = self.leLayerName.text()
geom_column = 'Geometry'
uri.setDataSource(schema, table, geom_column)
display_name = self.leLayerName.text()
layer = QgsVectorLayer(uri.uri(), display_name, 'spatialite')
if layer.isValid():
for k, v in self.DEFAULT_PROPERTIES.iteritems():
layer.setCustomProperty(k, v)
QgsMapLayerRegistry.instance().addMapLayer(layer)
示例4: _qgis_layer
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def _qgis_layer(uri, schema_name, layer_name, geometry_column, provider, qgis_layer_name, layer_xpath, layer_pkid):
if geometry_column is not None:
g_column = "({})".format(geometry_column)
else:
g_column = ""
if provider == "SQLite":
# use OGR for spatialite loading
l = QgsVectorLayer("{}|layername={}{}".format(uri, layer_name, g_column), qgis_layer_name, "ogr")
l.setProviderEncoding("UTF-8")
else:
if schema_name is not None:
s_table = '"{}"."{}"'.format(schema_name, layer_name)
else:
s_table = '"{}"'.format(layer_name)
# remove "PG:" in front of the uri
uri = uri[3:]
l = QgsVectorLayer("{} table={} {} sql=".format(uri, s_table, g_column), qgis_layer_name, "postgres")
# sets xpath
if layer_xpath:
l.setCustomProperty("xpath", layer_xpath)
l.setCustomProperty("pkid", layer_pkid)
return l
示例5: checkRemovingNonLabeledLayerKeepsLabelCache
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def checkRemovingNonLabeledLayerKeepsLabelCache(self, job_type):
""" removing a previously used non-labeled layer should keep any previous label caches"""
layer = QgsVectorLayer("Point?field=fldtxt:string",
"layer1", "memory")
layer.setCustomProperty("labeling", "pal")
layer.setCustomProperty("labeling/enabled", True)
layer.setCustomProperty("labeling/fieldName", "fldtxt")
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
"layer2", "memory")
settings = QgsMapSettings()
settings.setExtent(QgsRectangle(5, 25, 25, 45))
settings.setOutputSize(QSize(600, 400))
settings.setLayers([layer, layer2])
# with cache - first run should populate cache
cache = QgsMapRendererCache()
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
self.assertFalse(job.usedCachedLabels())
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
self.assertEqual(set(cache.dependentLayers('_labels_')), {layer})
# remove a previously labeled layer
settings.setLayers([layer])
# second job should be able to use label cache, since only a non-labeled layer was removed
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
# should use cache
self.assertTrue(job.usedCachedLabels())
# results should have been cached
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertEqual(set(cache.dependentLayers('_labels_')), {layer})
self.assertTrue(job.takeLabelingResults())
示例6: checkRepaintLabeledLayerInvalidatesLabelCache
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def checkRepaintLabeledLayerInvalidatesLabelCache(self, job_type):
layer = QgsVectorLayer("Point?field=fldtxt:string",
"layer1", "memory")
layer.setCustomProperty("labeling", "pal")
layer.setCustomProperty("labeling/enabled", True)
layer.setCustomProperty("labeling/fieldName", "fldtxt")
settings = QgsMapSettings()
settings.setExtent(QgsRectangle(5, 25, 25, 45))
settings.setOutputSize(QSize(600, 400))
settings.setLayers([layer])
# with cache - first run should populate cache
cache = QgsMapRendererCache()
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
self.assertFalse(job.usedCachedLabels())
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
self.assertEqual(cache.dependentLayers('_labels_'), [layer])
# trigger repaint on layer - should invalidate cache and block use of cached labels
layer.triggerRepaint()
self.assertFalse(cache.hasCacheImage('_labels_'))
# second job should not use label cache, since layer was repainted
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
# shouldn't use cache
self.assertFalse(job.usedCachedLabels())
# but results should have been cached
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
示例7: run
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def run(self):
"""Run method that performs all the real work"""
self.dlg.layerComboBox.clear()
self.dlg.sheetTypeComboBox.clear()
self.dlg.scaleComboBox.clear()
#self.dlg.label_2.setText('')
Alllayers = self.iface.legendInterface().layers()
#layer_list = []
lcount=0
for layer in Alllayers:
xyCrs = layer.crs()
if xyCrs.projectionAcronym()=='longlat':
lcount=lcount+1
self.dlg.layerComboBox.addItem(layer.name(),layer)
self.dlg.sheetTypeComboBox.addItem('Indian and Adjoining Countries Series Maps')
self.dlg.sheetTypeComboBox.addItem('Open Series Maps')
scale_list=['1:1M','1:250,000','1:125,000','1:50,000','1:25,000']
self.dlg.scaleComboBox.addItems(scale_list)
# show the dialog
self.dlg.show()
# Run the dialog event loop
result = self.dlg.exec_()
# See if OK was pressed
if result:
global scaleID
global sheetw
global sheeth
if lcount>0:
scaleID=self.dlg.scaleComboBox.currentIndex()+1
maptype= self.dlg.sheetTypeComboBox.currentIndex()+1
if maptype==1:
sheetw,sheeth=setFactor1(scaleID)
if maptype==2:
sheetw,sheeth=setFactor2(scaleID)
index = self.dlg.layerComboBox.currentIndex()
clayer = self.dlg.layerComboBox.itemData(index)
e=clayer.extent()
a,b,c=degDec2dms(e.xMinimum())
slongs=dmstosec(a,b,c)
a,b,c=degDec2dms(e.xMaximum())
elongs=dmstosec(a,b,c)
a,b,c=degDec2dms(e.yMinimum())
slats=dmstosec(a,b,c)
a,b,c=degDec2dms(e.yMaximum())
elats=dmstosec(a,b,c)
slongs,elongs,slats,elats=CalculateExtentInTermsOfSheet(slongs,elongs,slats,elats)
Xgrids=int(elongs-slongs)//sheetw # // is used for modular division
Ygrids=int(elats-slats)//sheeth
layer = QgsVectorLayer("Polygon?crs=EPSG:4326", "TopoSheets", "memory")
global poly
global pr
pr = layer.dataProvider()
pr.addAttributes([QgsField("id",QVariant.Int),QgsField("SheetNo",QVariant.String),QgsField("Inside",QVariant.String)])
layer.updateFields()
poly = QgsFeature()
CalculateSheet(maptype,slats,slongs,Xgrids,Ygrids)
n=0
# check intersection of selected layer feature with sheets
fieldIdx = pr.fields().indexFromName('Inside' )
updateMap = {}
for f in clayer.getFeatures():
for a in layer.getFeatures():
if a.geometry().intersects(f.geometry()):
n=n+1
updateMap[a.id()] = { fieldIdx:1 }
pr.changeAttributeValues(updateMap)
# set the layer symbology
values = (
('In', True,True,QColor.fromRgb(95,254,99)),
('Out', False,False,'yellow'),
)
# create a category for each item in values
ranges=[]
for label, lower, upper, color in values:
symbol = QgsSymbolV2.defaultSymbol(layer.geometryType())
symbol.setColor(QColor(color))
rng = QgsRendererRangeV2(lower, upper, symbol, label)
ranges.append(rng)
expression = 'Inside' # field name
renderer = QgsGraduatedSymbolRendererV2(expression, ranges)
layer.setRendererV2(renderer)
# set layer transparence and dolabelling
layer.setLayerTransparency(65)
layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([layer])
layer.setCustomProperty("labeling", "pal")
layer.setCustomProperty("labeling/enabled", "true")
layer.setCustomProperty("labeling/fontFamily", "Arial")
layer.setCustomProperty("labeling/fontSize", "10")
layer.setCustomProperty("labeling/fieldName", "SheetNo")
layer.setCustomProperty("labeling/placement", "1")
iface.mapCanvas().refresh()
else:
iface.messageBar().pushMessage("Error", "No layers loaded, Load layer with Geographic Corrdinates", level=QgsMessageBar.CRITICAL)
pass
示例8: points_along_line
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def points_along_line(layerout,
startpoint,
endpoint,
distance,
label,
layer,
selected_only=True,
force=False,
divide=0):
"""Adding Points along the line
"""
# Create a new memory layer and add a distance attribute self.layerNameLine
#layer_crs = virt_layer.setCrs(layer.crs())
virt_layer = QgsVectorLayer("Point?crs=%s" % layer.crs().authid(),
layerout,
"memory")
provider = virt_layer.dataProvider()
virt_layer.startEditing() # actually writes attributes
units = layer.crs().mapUnits()
unit_dic = {
QGis.Degrees: 'Degrees',
QGis.Meters: 'Meters',
QGis.Feet: 'Feet',
QGis.UnknownUnit: 'Unknown'}
unit = unit_dic.get(units, 'Unknown')
provider.addAttributes([QgsField("fid", QVariant.Int)])
provider.addAttributes([QgsField("cng_("+unit+")", QVariant.Int)])
def get_features():
"""Getting the features
"""
if selected_only:
return layer.selectedFeatures()
else:
return layer.getFeatures()
# Loop through all (selected) features
for feature in get_features():
geom = feature.geometry()
# Add feature ID of selected feature
fid = feature.id()
if not geom:
QgsMessageLog.logMessage("No geometry", "QChainage")
continue
features = create_points_at(startpoint, endpoint, distance, geom,
fid, force, divide)
provider.addFeatures(features)
virt_layer.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([virt_layer])
virt_layer.commitChanges()
virt_layer.reload()
#from here Add labeling
#generic labeling properties
if label:
virt_layer.setCustomProperty("labeling", "pal")
virt_layer.setCustomProperty("labeling/enabled", "true")
virt_layer.setCustomProperty("labeling/fieldName", "cng_("+unit+")")
virt_layer.setCustomProperty("labeling/fontSize", "10")
virt_layer.setCustomProperty("labeling/multiLineLabels", "true")
#virt_layer.setCustomProperty("labeling/Size", "5")
# symbol = QgsMarkerSymbolV2.createSimple({"name": "capital"})
# virt_layer.setRendererV2(QgsSingleSymbolRendererV2(symbol))
virt_layer.triggerRepaint()
return
示例9: loadLayerType
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def loadLayerType(self, item, geom_type):
layer = QgsVectorLayer("%s?crs=epsg:4326" % geom_type, item.name, "memory")
layer.setCustomProperty('DiviId', item.id)
item.setQgisStyle(layer)
with Cache(self):
self.loadLayer(layer, add_empty=True)
示例10: checkLabeledLayerWithBlendModesCannotBeCached
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def checkLabeledLayerWithBlendModesCannotBeCached(self, job_type):
""" any labeled layer utilising blending modes cannot be cached"""
layer = QgsVectorLayer("Point?field=fldtxt:string",
"layer1", "memory")
layer.setCustomProperty("labeling", "pal")
layer.setCustomProperty("labeling/enabled", True)
layer.setCustomProperty("labeling/fieldName", "fldtxt")
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
"layer2", "memory")
layer2.setCustomProperty("labeling", "pal")
layer2.setCustomProperty("labeling/enabled", True)
layer2.setCustomProperty("labeling/fieldName", "fldtxt")
layer2.setCustomProperty("labeling/blendMode", 5)
settings = QgsMapSettings()
settings.setExtent(QgsRectangle(5, 25, 25, 45))
settings.setOutputSize(QSize(600, 400))
settings.setLayers([layer, layer2])
# with cache - cache should not be populated!
cache = QgsMapRendererCache()
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
self.assertFalse(job.usedCachedLabels())
self.assertFalse(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
# second job should also not be able to use label cache
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
# shouldn't use cache
self.assertFalse(job.usedCachedLabels())
# and results should not have been cached
self.assertFalse(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
示例11: checkAddingNewLabeledLayerInvalidatesLabelCache
# 需要导入模块: from qgis.core import QgsVectorLayer [as 别名]
# 或者: from qgis.core.QgsVectorLayer import setCustomProperty [as 别名]
def checkAddingNewLabeledLayerInvalidatesLabelCache(self, job_type):
""" adding a new labeled layer should invalidate any previous label caches"""
layer = QgsVectorLayer("Point?field=fldtxt:string",
"layer1", "memory")
layer.setCustomProperty("labeling", "pal")
layer.setCustomProperty("labeling/enabled", True)
layer.setCustomProperty("labeling/fieldName", "fldtxt")
settings = QgsMapSettings()
settings.setExtent(QgsRectangle(5, 25, 25, 45))
settings.setOutputSize(QSize(600, 400))
settings.setLayers([layer])
# with cache - first run should populate cache
cache = QgsMapRendererCache()
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
self.assertFalse(job.usedCachedLabels())
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertTrue(job.takeLabelingResults())
self.assertEqual(cache.dependentLayers('_labels_'), [layer])
# add another labeled layer
layer2 = QgsVectorLayer("Point?field=fldtxt:string",
"layer2", "memory")
layer2.setCustomProperty("labeling", "pal")
layer2.setCustomProperty("labeling/enabled", True)
layer2.setCustomProperty("labeling/fieldName", "fldtxt")
settings.setLayers([layer, layer2])
# second job should not be able to use label cache, since a new layer was added
job = job_type(settings)
job.setCache(cache)
job.start()
job.waitForFinished()
# shouldn't use cache
self.assertFalse(job.usedCachedLabels())
# but results should have been cached
self.assertTrue(cache.hasCacheImage('_labels_'))
self.assertEqual(set(cache.dependentLayers('_labels_')), {layer, layer2})
self.assertTrue(job.takeLabelingResults())