如何在PyQGIS中获取shapefile几何类型?

时间:2014-08-12 21:03:23

标签: python shapefile qgis

我正在编写一个依赖于知道所加载的shapefile的几何类型的脚本。 但是我已经查看了pyqgis cookbook和API,并且无法弄清楚如何调用它。

事实上,我在解释API方面遇到了麻烦,因此对该主题的任何亮点都会受到赞赏。

谢谢

3 个答案:

答案 0 :(得分:7)

命令很简单:

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'

您可以使用数字(1,2,3,4)代替QGis.WKB**** *语法,但上述方式会产生更易读的代码。

食谱中的实际参考资料如下:http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/geometry.html

答案 1 :(得分:1)

QgsGeometry具有返回所需内容的方法wkbType。

答案 2 :(得分:1)

寻找一种在字符串中使用几何类型的方法,经过大量的搜索后,最终在文档中找到了一个干净的方法:

geomTypeString=qgis.core.QgsWKBTypes.displayString(int(layer.wkbType()))

将提供' Point',' LineString'' Polygon'' MultiPoint' ....以及它&#34 ;知道" Qgis中的所有几何类型。

出于我的目的,我仍然遇到了一些问题,因为Point25D'和其他奇怪的类型如此添加,以限制它平坦的(点,线,多边形)

geomFlatTypeString=qgis.core.QgsWKBTypes.displayString(int(
    qgis.core.QgsWKBTypes.flatType(int(in_layer.wkbType()))))

对于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