답변:
매끄럽게 시도 할 수 있습니다.
공간 관계를 설명하고 창에서 작동합니다.
공간 데이터 모델에는 포함, 교차, 겹침, 접촉 등 기하학적 객체 간의 자연 언어 관계 그룹과 구성 요소 포인트 세트의 상호 교차점의 3x3 매트릭스를 사용하여이를 이해하기위한 이론적 프레임 워크가 수반됩니다.
다음 코드는 교차를 테스트하는 방법을 보여줍니다.
from shapely.geometry import Polygon
p1 = Polygon([(0,0), (1,1), (1,0)])
p2 = Polygon([(0,1), (1,0), (1,1)])
print(p1.intersects(p2))
이를 위해 GDAL / OGR Python 바인딩 을 사용할 수 있습니다 .
from osgeo import ogr
wkt1 = "POLYGON ((1208064.271243039 624154.6783778917, 1208064.271243039 601260.9785661874, 1231345.9998651114 601260.9785661874, 1231345.9998651114 624154.6783778917, 1208064.271243039 624154.6783778917))"
wkt2 = "POLYGON ((1199915.6662253144 633079.3410163528, 1199915.6662253144 614453.958118695, 1219317.1067437078 614453.958118695, 1219317.1067437078 633079.3410163528, 1199915.6662253144 633079.3410163528)))"
poly1 = ogr.CreateGeometryFromWkt(wkt1)
poly2 = ogr.CreateGeometryFromWkt(wkt2)
intersection = poly1.Intersection(poly2)
print intersection.ExportToWkt()
None
교차하지 않으면 반환 됩니다. 이들이 교차하면 형상이 모두 교차했음을 반환합니다.
또한 GDAL / OGR Cookbook 에서 추가 정보를 찾을 수 있습니다 .
R을 알고 있거나 관심이 있다면 유용한 공간 패키지가 있습니다. http://cran.r-project.org/web/views/Spatial.html R (RPy *)과 상호 작용하는 Python 모듈이 있습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 원과 오목하고 볼록한 다각형 사이의 충돌을 처리하기 위해 파이썬 라이브러리를 작성했습니다.
사용하기 매우 간단합니다. 여기 있습니다!
예:
from collision import *
from collision import Vector as v
p0 = Concave_Poly(v(0,0), [v(-80,0), v(-20,20), v(0,80), v(20,20), v(80,0), v(20,-20), v(0,-80), v(-20,-20)])
p1 = Concave_Poly(v(20,20), [v(-80,0), v(-20,20), v(0,80), v(20,20), v(80,0), v(20,-20), v(0,-80), v(-20,-20)])
print(collide(p0,p1))
다음을 포함하여 응답을 생성하도록 할 수도 있습니다.
overlap (how much they overlap)
overlap vector (when subtracted from second shapes position, the shapes will no longer be colliding)
overlap vector normalized (vector direction of collision)
a in b (whether the first shape is fully inside the second)
b in a (whether the second shape is fully inside the first)
레벨을 알고 싶다면 이것을 사용할 수 있습니다. 인수로 다각형 목록을 제공 할 수 있습니다. 그리고 반환 값으로 레벨 목록을 얻습니다. 레벨 목록에는 다각형이 있습니다.
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
def isPolygonInPolygon(poly1,poly2):
poly2 = Polygon(poly2)
for poi in poly1:
poi = Point(poi)
if(poly2.contains(poi)):
return True
def polygonTransformHierarchy(polygon_list):
polygon_list_hierarchy = []
for polygon1 in polygon_list:
level = 0
for polygon2 in polygon_list:
if(isPolygonInPolygon(polygon1, polygon2)):
level += 1
if(level > len(polygon_list_hierarchy)-1):
dif = (level+1)- len(polygon_list_hierarchy)
for _ in range(dif):
polygon_list_hierarchy.append([])
polygon_list_hierarchy[level].append(polygon1)
return polygon_list_hierarchy