2014-01-22 5 views
2

Я пытаюсь использовать функцию «внутри» функции shapely для создания «пространственного соединения» Linestring и точечного файла (fyi - точечный файл был сгенерирован с использованием функции интерполяции на linestring). Проблема в том, что ничего не возвращается.Определите, является ли фигурная точка в пределах linestring/multilinestring.

Что мне не хватает?

    for x in range(1, numIntervals): 
        newPt = s.interpolate(interval * x) 
        ## this print statement confirms that the shapely point objects work 
        ## and are being made 
        print newPt 

        ## all things fail within the if/write statement 
        if newPt.within(shape(i['geometry'])): 
         newPt['properties'] = i['properties'] 
         e.write({'geometry':mapping(newPt),'properties':i['properties']}) 

NOTES: 

i = {'geometry': {'type': 'LineString', 'coordinates': [(-9765787.998118492, 5488940.974948905), (-9748582.801636808, 5488402.127570709)]}, 'type': 'Feature', 'id': '0', 'properties': OrderedDict([(u'gid', 3)])} 

и

newPt = POINT (-9763788.9782693591000000 5488878.3678984242000000) 

ответ

6

Есть плавающей ошибки точности точки при нахождении точки на линии. Используйте расстояние с соответствующим порогом.

from shapely.geometry import Point, LineString 

line = LineString([(-9765787.9981184918, 5488940.9749489054), (-9748582.8016368076, 5488402.1275707092)]) 
point = Point(-9763788.9782693591, 5488878.3678984242) 

line.within(point) # False 
line.distance(point) # 7.765244949417793e-11 
line.distance(point) < 1e-8 # True 
+0

Hi. Как мы можем выбрать соответствующий порог? Я столкнулся с той же проблемой, она работала для меня только тогда, когда я выбирал 1е-4. На каком основании мы должны выбрать это? Я использую wgs84 lat long points –

+0

Я имею в виду для someline, line.distance (point) возвращает true, когда я использую <1e-4, а для некоторого его 1e-3. Означает ли это, я должен рассчитать расстояние между точкой и всей линией в моем наборе данных и взять один с минимальным расстоянием? Есть ли альтернативный эффективный подход к этому? –

+0

@ds_user действительно зависит от того, как вы получили данные или какое разрешение оно представляет (например, см. [Десятичные градусы] (https://en.wikipedia.org/wiki/Decimal_degrees)). Вам нужно будет изучить непроектированные данные в ГИС, чтобы получить представление в вашем случае. –