2013-03-06 9 views
0

나는 점과 선 사이의 최단 거리를 결정하기 위해 파이썬에서 OGR 거리를 사용하고 있습니다. 내 결과는 QGIS를 사용하여 얻은 결과와 완전히 다릅니다. OGR이 사용하는 단위가 좌표계에 의존한다고 가정합니다. OGR이도를 사용할 수 있습니까? 그렇다면 어떻게 미터로 변환 할 수 있습니까? 내 코드는 다음과 같습니다OGR 거리 단위

import ogr 

driver = ogr.GetDriverByName('ESRI Shapefile') 

roads = driver.Open('G:/Basedata/OR/infra/TigerRoads2010/OR_TIGERroads_2010_merge.shp', 0) 
point = driver.Open('U:/My Documents/Tool/shp/testareacentro.shp', 0) 

roadslayer = roads.GetLayer() 
pointl = point.GetLayer() 

roadsfeature = roadslayer.GetNextFeature() 
pointf = pointl.GetNextFeature() 

roadgeom = roadsfeature.GetGeometryRef() 
pointgeom = pointf.GetGeometryRef() 

dist = pointgeom.Distance(roadgeom) 

print dist 
+1

단위가 입력 단위가 될 것으로 기대합니다. – askewchan

+0

입력 단위가 무엇인지 어떻게 알 수 있습니까? – ustroetz

+0

입력 값의 출처를 살펴 봐야합니다. 튜플로 포인트를 주면 숫자는 무엇을 나타내는가? – askewchan

답변

0

내 거리가 꺼져있는 이유는 내가 첫 번째 기능을 비교하기 때문이다. 이 코드는 QGIS에서와 동일한 결과를 제공합니다 :

import ogr 

driver = ogr.GetDriverByName('ESRI Shapefile') 

lineshp = driver.Open('U:/My Documents/Tool/shp/line.shp', 0) 
linelyr = lineshp.GetLayer() 

pointshp = driver.Open('U:/My Documents/Tool/shp/point.shp', 0) 
pointlyr = pointshp.GetLayer() 

linefeat = linelyr.GetNextFeature() 
pointfeat = pointlyr.GetNextFeature() 

point_geom = pointfeat.GetGeometryRef() 

distlist = [] 
while linefeat: 
    line_geom = linefeat.GetGeometryRef() 
    dist = point_geom.Distance(line_geom) 
    distlist.append(dist) 
    linefeat.Destroy() 
    linefeat = linelyr.GetNextFeature() 

print min(distlist)