Ищете способ получить тип геометрии в строке и после долгих поисков, наконец, нашел чистый метод в документах:
geomTypeString=qgis.core.QgsWkbTypes.displayString(int(layer.wkbType()))
это даст «Point», «LineString», «Polygon», «MultiPoint».... и знает все типы геометрии в Qgis.
Для моей цели у меня все еще были некоторые проблемы с «Point25D» и другими странными типами, поэтому я добавил это, чтобы ограничить его плоскими (Point, Line, Poly)
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
person
gui3
schedule
22.08.2017