2013-05-30 2 views
2

다각형 기능이있는 레이어가 있습니다. 각 기능에는 속성과 값이 있습니다. 또한 좌표 목록이 있으며 좌표가있는 피쳐 (또는 다각형)가 무엇인지 알고 싶습니다.QGis : 점이있는 내부의 다각형 찾기

누군가가이 문제를 해결하는 방법을 안내해 줄 수 있습니까? 내 목표를 달성하는 데 도움이되는 함수가 API에 있습니까? 아니면 계산 지오메트리 알고리즘을 사용해야합니까? 후자를 수행하는 방법을 알고 있지만 이미 함수가 내장되어 있다면 시간이 절약됩니다.

감사합니다.

답변

1

필자는 결국 스스로 해냈습니다.

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) 
1
while provider.nextFeature(feature): 
    if (feature.geometry().contains(QgsGeometry.fromPoint(QgsPoint(lon, lat)))): 
     print 'Contained in feature %d' % feature.id()