문제는 'total_bounds'방법을 사용하고 있기 때문입니다. 경계 상자의 최대 및 최소 포인트가있는 튜플 만 생성합니다. 사용되는 방법은 '봉투'입니다. 이전에는 각각 'GeoDataFrame'을 빌드했습니다. 예를 들어, 쉐이프 파일을 GeoDataFrame 으로 읽는 경우 :
import geopandas as gpd
pol1 = gpd.GeoDataFrame.from_file("pyqgis_data/polygon1.shp")
pol8 = gpd.GeoDataFrame.from_file("pyqgis_data/polygon8.shp")
pol1의 경계 상자를 만들고 각각의 GeoDataFrame을 만듭니다 .
bounding_box = pol1.envelope
df = gpd.GeoDataFrame(gpd.GeoSeries(bounding_box), columns=['geometry'])
두 GeoDataFrame을 교차 :
intersections = gpd.overlay(df, pol8, how='intersection')
플로팅 결과 :
from matplotlib import pyplot as plt
plt.ion()
intersections.plot()
예상대로 작동했습니다.
편집 참고 사항 :
'total_bounds'메서드를 사용하면 ( 'envelope'메서드는 다각형의 각 기능에 대한 경계 상자를 반환하기 때문에)이 방법을 사용할 수 있습니다.
from matplotlib import pyplot as plt
import geopandas as gpd
from shapely.geometry import Point, Polygon
pol1 = gpd.GeoDataFrame.from_file("pyqgis_data/polygon1.shp")
pol8 = gpd.GeoDataFrame.from_file("pyqgis_data/polygon8.shp")
bbox = pol1.total_bounds
p1 = Point(bbox[0], bbox[3])
p2 = Point(bbox[2], bbox[3])
p3 = Point(bbox[2], bbox[1])
p4 = Point(bbox[0], bbox[1])
np1 = (p1.coords.xy[0][0], p1.coords.xy[1][0])
np2 = (p2.coords.xy[0][0], p2.coords.xy[1][0])
np3 = (p3.coords.xy[0][0], p3.coords.xy[1][0])
np4 = (p4.coords.xy[0][0], p4.coords.xy[1][0])
bb_polygon = Polygon([np1, np2, np3, np4])
df2 = gpd.GeoDataFrame(gpd.GeoSeries(bb_polygon), columns=['geometry'])
intersections2 = gpd.overlay(df2, pol8, how='intersection')
plt.ion()
intersections2.plot()
결과는 동일합니다.