Ste*_*utz 5 python shapefile qgis
我正在编写一个依赖于知道加载的shapefile的几何类型的脚本.但我查看了pyqgis cookbook和API,无法弄清楚如何调用它.
事实上,我在解释API方面遇到了麻烦,所以任何关于该主题的灯光都会受到赞赏.
谢谢
命令很简单:
layer=qgis.utils.iface.mapCanvas().currentLayer()
if layer.wkbType()==QGis.WKBPoint:
print 'Layer is a point layer'
if layer.wkbType()==QGis.WKBLineString:
print 'Layer is a line layer'
if layer.wkbType()==QGis.WKBPolygon:
print 'Layer is a polygon layer'
if layer.wkbType()==QGis.WKBMultiPolygon:
print 'Layer is a multi-polygon layer'
if layer.wkbType()==100:
print 'Layer is a data-only layer'
Run Code Online (Sandbox Code Playgroud)
您可以使用数字(1,2,3,4)代替 QGis.WKB*****语法,但上述方式会产生更易读的代码.
食谱中的实际参考资料如下:http: //docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/geometry.html
寻找一种在字符串中包含几何类型的方法,经过大量搜索,终于在文档中找到了一个干净的方法:
geomTypeString=qgis.core.QgsWkbTypes.displayString(int(layer.wkbType()))
Run Code Online (Sandbox Code Playgroud)
这将给出'Point','LineString','Polygon','MultiPoint'......并且它“知道”Qgis中的所有几何类型。
出于我的目的,我仍然对“Point25D”和其他奇怪的类型遇到一些麻烦,因此添加了它以将其限制为平面类型(点、线、多边形)
geomFlatTypeString=qgis.core.QgsWkbTypes.displayString(int(
qgis.core.QgsWkbTypes.flatType(int(in_layer.wkbType()))))
Run Code Online (Sandbox Code Playgroud)
对于 Info 来说,目标是一种创建层的内存层副本的方法,无论类型是什么,以下是完整代码:
def copyLayer(in_layer,condition=None):
#condition=function to test features and return True or False______
if condition==None:
def condition(f):
return True
typeGeom=qgis.core.QgsWkbTypes.displayString(int(
qgis.core.QgsWkbTypes.flatType(int(in_layer.wkbType()))))
crsId=in_layer.crs().authid()
out_layer=QgsVectorLayer(typeGeom+"?crs="+crsId,
in_layer.name()+"_copie",
"memory")
fields=in_layer.dataProvider().fields().toList()
out_layer.dataProvider().addAttributes(fields)
out_layer.updateFields()
features=[f for f in in_layer.getFeatures() if condition(f)]
out_layer.dataProvider().addFeatures(features)
return out_layer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6429 次 |
| 最近记录: |