2013-03-06 8 views
0

Я использую OGR Distance в Python для определения кратчайшего расстояния между точкой и линией. Мои результаты совершенно разные, чем те, которые я получаю от QGIS. Я полагаю, что единицы OGR используются в зависимости от системы координат? Может ли быть, что OGR использует градусы? Если да, то как я мог бы преобразовать их в счетчики? Мой код выглядит следующим образом:OGR Distance Units

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)