2014-01-22 7 views
2

선들과 점 파일의 '공간 조인'을 수행하기 위해 shapely의 'within'함수를 사용하려고합니다. (fyi - 점 보간법을 사용하여 점 파일을 생성했습니다. 선 스트링). 문제는 반환되는 것이 없습니다.매끈한 점이 선 스트링/다중 선 스트링 내에 있는지 확인

무엇이 누락 되었습니까?

    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

안녕하세요. 이것에 대한 적절한 기준점을 어떻게 선택할 수 있습니까? 나는 똑같은 문제에 직면하고있다. 나는 1e-4를 선택할 때만 나를 위해 일했다. 어떤면에서 우리는 그것을 선택해야합니까? 나는 wgs84 lat long points를 사용하고있다. –

+0

someline에 대해 의미한다. line.distance (point)는 <1e-4를 사용할 때 참을 반환하고, 어떤 경우에는 1e-3을 반환한다. 즉, 내 데이터 집합의 점과 모든 선 사이의 거리를 계산하고 거리를 최소로 취해야합니까? 이것에 대한 효율적인 효율적인 접근 방법이 있습니까? –

+0

@ds_user 데이터를 얻은 방법 또는 데이터를 나타내는 해상도 (예 : [십진수] (https://en.wikipedia.org/wiki/Decimal_degrees) 참조)에 따라 달라집니다. 자신의 경우에 아이디어를 얻으려면 GIS의 계획되지 않은 데이터를 조사해야합니다. –