Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QGis:查找点所在的多边形_Python_Polygon_Computational Geometry_Shapefile_Qgis - Fatal编程技术网

Python QGis:查找点所在的多边形

Python QGis:查找点所在的多边形,python,polygon,computational-geometry,shapefile,qgis,Python,Polygon,Computational Geometry,Shapefile,Qgis,我有一个具有多边形特征的图层。每个特征都有属性和值。我还有一个坐标列表,我想知道坐标所在的特征(或多边形) 有人能告诉我怎么做吗?API中是否有一个函数可以帮助我实现我的目标,或者我应该自己使用一些计算几何算法来实现它?我知道如何做后者,但如果已经有内置函数的话,这会节省我一些时间 谢谢。我终于自己做到了 import sys import os from qgis.core import * import matplotlib.pyplot as plt from matplotlib.pat

我有一个具有多边形特征的图层。每个特征都有属性和值。我还有一个坐标列表,我想知道坐标所在的特征(或多边形)

有人能告诉我怎么做吗?API中是否有一个函数可以帮助我实现我的目标,或者我应该自己使用一些计算几何算法来实现它?我知道如何做后者,但如果已经有内置函数的话,这会节省我一些时间


谢谢。

我终于自己做到了

import sys
import os
from qgis.core import *
import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patches

LATITUDE = 1.29306
LONGITUDE = 103.856

QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

layer=QgsVectorLayer("/home/shubham/SMART/zones/mtz1092p.shp", "mtz1092p", "ogr")
if not layer.isValid():
    print "Layer failed to load!"
provider = layer.dataProvider()

def findFeatureId(point):
    feat = QgsFeature()
    allAttrs = provider.attributeIndexes()
    provider.select(allAttrs)
    while provider.nextFeature(feat):
        geom = feat.geometry()
        x = geom.asPolygon()
        if len(x) == 0:
            print "Feature ID %d has no ring" % feat.id()
        else:
            codes = []
            codes.append(Path.MOVETO)
            for i in range (0, len(x[0]) - 2):
                codes.append(Path.LINETO)
            codes.append(Path.CLOSEPOLY)
            path = Path(x[0], codes)
            if (path.contains_point(point, None, 0.0)):
                print "Point contained in feature ID %d" %feat.id()

if __name__ == "__main__":
    crsSrc = QgsCoordinateReferenceSystem(4326) # WGS84
    crsDest = QgsCoordinateReferenceSystem(3414)# SVY21
    xform = QgsCoordinateTransform(crsSrc, crsDest)
    pt = xform.transform(QgsPoint(LONGITUDE, LATITUDE))
    findFeatureId(pt)
while provider.nextFeature(feature):
    if (feature.geometry().contains(QgsGeometry.fromPoint(QgsPoint(lon, lat)))):
        print 'Contained in feature %d' % feature.id()