1 votos

Función de geometría de consulta espacial de PyQGIS salida incorrecta

legend=iface.legendInterface()
layers=legend.layers()
layer1=layers[0]
layer2=layers[2]
pointCounter=0
for pointFeat in layer1.getFeatures():
    pointGeom=pointFeat.geometry()
    for polyFeat in layer2.getFeatures():
       polyGeom=polyFeat.geometry()
       if pointGeom.disjoint(polyGeom):
          layers[0].select(pointGeom.id())
          pointCounter=pointCounter+1

print pointCounter

no se obtiene la salida correcta para disjoint

Expected Result The result I got

2voto

Braiam Puntos 120

El código que escribiste cuenta el número de polígonos que son disjuntos de cada punto, así que asumiendo que los puntos están en un solo polígono, puedes esperar encontrar un conteo de number of points * (number of polygons -1 ) .

Si lo que quieres es contar el número de puntos que están desunidos de toda la capa, es decir, de TODOS los polígonos, tendrías que hacer lo contrario: descartar cualquier punto que intersecte al menos un polígono, y registrar los que no intersecten ningún polígono. Usando tu código, se podría modificar a lo siguiente. Ten en cuenta que probablemente haya otras formas (mejores) de hacerlo en toda la capa directamente.

legend=iface.legendInterface()
layers=legend.layers()
layer1=layers[0]
layer2=layers[2]
pointCounter=0
for pointFeat in layer1.getFeatures():
    pointGeom=pointFeat.geometry()
    intersected = False #reset the boolean flag
    for polyFeat in layer2.getFeatures():
       polyGeom=polyFeat.geometry()
       if pointGeom.intersects(polyGeom):
          intersected = True  #point and polygon do intersect
          break #no need to check other polygons

     #Now that every polygons have been tested, deduct if the point is disjointed or not
     if intersected == False
          layers[0].select(pointGeom.id())
          pointCounter=pointCounter+1

print pointCounter

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