4 votos

Crear geometría vacía en QGIS con Python

Me gustaría crear un conjunto de datos de puntos modelo en QGIS 3.0.3 con Python en la consola de QGIS python para hacer algunas pruebas. En concreto, quiero crear un conjunto de datos de puntos que tiene una característica con una geometría vacía, y, otra característica con una geometría nula.

Lo que he intentado es:

layer = QgsVectorLayer('Point?crs=epsg:4326&field=id:string&field=type:string','ModelPoints',"memory")
pr = layer.dataProvider()

points = {}
points['Pt1'] = ['(1,1)', QgsPointXY(1,1)]
points['Pt2'] = ['(2,1)', QgsPointXY(1,1)]
points['Pt3'] = ['(4,1)', QgsPointXY(1,1)]
points['Pt4'] = ['empty', QgsPointXY()]
points['Pt5'] = ['null', None]

for id, point in points.items():
    pt = QgsFeature()   
    pt.setAttributes([id,point[0]])
    if point[1] is not None:
        pt.setGeometry(QgsGeometry.fromPointXY(point[1]))
    print(pt.geometry().asWkt())    
    pr.addFeature(pt)

layer.updateExtents()
QgsProject.instance().addMapLayer(layer)

En este código, la geometría de punto vacío se pretende crear por:

pt.setGeometry(QgsGeometry.fromPointXY(QgsPointXY())

Sin embargo, el resultado es:

pt.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(0,0))

Por lo tanto, mi código está haciendo un punto con el vértice (0,0), pero, mientras que necesito un punto (o una geometría) sin vértices.

Nota: Los enfoques g = QgsGeometry.fromWkt('POINT') y g = QgsGeometry.fromWkt('POINT EMPTY') ambos resultan en una geometría nula como se muestra utilizando print(g.isNull()) .

3voto

Myles Gray Puntos 294

Un enfoque para crear una geometría vacía es:

QgsGeometry.fromWkt('LineString()')

Se pueden comprobar mediante:

QgsGeometry.fromWkt('LineString()').isEmpty()
True
QgsGeometry.fromWkt('LineString()').isNull()
False

Sin embargo, para un punto vacío, QGIS muestra actualmente:

> QgsGeometry.fromWkt('Point()').isNull()
True

Por lo tanto, se pueden construir conjuntos de datos de líneas vacías, pero puede producirse un error en el caso de conjuntos de datos de puntos vacíos.

0voto

cefect Puntos 56

Esto crea una geometría nula genérica:

QgsGeometry().fromWkt('')

Qgis 3.10.5

0voto

Michal Ferov Puntos 296

Lo siento, si es obvio, pero usted puede simplemente crear una instancia de QgsGeometry sin argumentos.

Por ejemplo

geo= QgsGeometry()
geo.isNull()
     True

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X