2016-06-08 3 views
1

Attached image shows the LineString or rather LineRing and a polygon. I expect them to intersect but they don not as per shapely intersects 나는 교차 할 것으로 예상되는 두 개의 기하학을 가지고 있습니다. 그러나 그들은 그렇지 않습니다. 하나는 라인 문자열 (링을 형성)이고 다른 하나는 라인 문자열 내부에있는 작은 사각형 다각형입니다. 줄의 문자열 포인트를 건드리지 않습니다. 매끈한 교차로 문서를 보았을 때, 나는 그것들이 엇갈 리기를 기대했지만 돈을 내지 않았다. Shapely geometry intersection - 선 문자열과 다각형이 교차하는 경우?

geom1 = LINESTRING (-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039) 

Geom2 = tile_polygon_geom = MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 -19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878))) 

내가 다각형의 선 스트링을 편집하는 경우

는 - 그냥 외부 및 내부 다각형이 교차 참조 POLYGON에 시험 선 스트링을 변경, 같은 점을 유지했다.

코드 즉
("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))”) 

에게 다음 코드를 인쇄

geometry1 = wktloads ("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))”) 

gepmetry2 = wktloads ("MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 -19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878)))") 

if geometry1.intersects(gepmetry2): 
    self.logger.info("geometries intersect") 
else: 
    self.logger.info("geometries do not intersect") 

누군가가 선 스트링의 교차 다각형 경우 일 것입니다 무슨 설명 할 수 "형상이 교차" 1) 다각형 라인과 라인 문자열 십자가에서 어떤 점 2) 다각형이 라인 문자열 안에 포함되어 있고, 아무 점도 접촉하지 않는다. 3) 선 스트링이 완전히 다각형 내에 있고 아무 점도 접촉하지 않는다.

내가 언급했듯이, 나는 # 2가 사실로 돌아갈 것으로 기대하지만 그렇지 않습니다. 내가 말하는거다

문서 : http://toblerity.org/shapely/manual.html는

object.intersects (기타) 반환 개체의 경계와 내부는 그 어떤 방법으로 교차 진정한 경우 다른 쪽.

이 술어는 contains(), crosses(), equals(), touches() 및 within()의 OR-ing과 동일합니다.

감사합니다.

답변

0

geom1Geom2은 매끈한 구조로 유효하게 구성되지 않습니다. 당신은 당신이 geometry1gepmetry2로 찍은 접근 방식을 닮은 코드를 조정하면

, 그것은 작동합니다

from shapely import geometry, wkt 

linestring = wkt.loads ("LINESTRING(-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039)") 

poly1 = wkt.loads ("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))") 

if poly1.intersects(linestring): 
    print("linestring intersects") 
else: 
    print("linestring does not intersect") 

poly2 = wkt.loads ("MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 
-19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878)))") 

if poly1.intersects(poly2): 
    print("polys intersect") 
else: 
    print("polys do not intersect")