我想按健康区域分割不列颠哥伦比亚省的道路网络。具体来说,我想为每个健康区域保存该区域内道路的形状文件。道路具有LINESTRING几何图形,而健康区域具有MULTIPOLYGON几何图形。
我想geopandas overlay和how=intersection
可能会帮助我完成这一任务,但是它告诉我交集是空的,这没有意义,因为将道路和卫生当局一起绘制(未显示)会显示出明显的重叠,所以我怀疑我误解了geopandas处理不同几何体交集的方式。
下面是一些最基本的代码,但是除非您碰巧在本地存储了这些文件,否则它不会运行。
import geopandas as gpd
import matplotlib.pyplot as plt
health_regions_df = gpd.read_file(
'../data/canada.geojson'
)
bc_roads_df = gpd.read_file(
'../data/geobase_nrn_rrn/bc/nrn_rrn_bc_shp_en.zip',
layer='NRN_bc_14_0_ROADSEG'
)
bc_roads_df.to_crs(
'EPSG:4326',
inplace=True
)
bc_hrs = health_regions_df[health_regions_df['province'] == 'British Columbia']
intersection = gpd.overlay(bc_hrs, bc_roads_df, how='intersection')
print(intersection)
上面给出了以下打印输出:
Empty GeoDataFrame
Columns: [fid, hr_uid, province, engname, frename, count, NID, ROADSEGID, ADRANGENID, DATASETNAM, SPECVERS, ACCURACY, ACQTECH, PROVIDER, CREDATE, REVDATE, METACOVER, ROADCLASS, RTNUMBER1, RTNUMBER2, RTNUMBER3, RTNUMBER4, RTNUMBER5, RTENAME1FR, RTENAME2FR, RTENAME3FR, RTENAME4FR, RTENAME1EN, RTENAME2EN, RTENAME3EN, RTENAME4EN, EXITNBR, NBRLANES, PAVSTATUS, PAVSURF, UNPAVSURF, STRUCTID, STRUCTTYPE, STRUNAMEEN, STRUNAMEFR, L_ADDDIRFG, L_HNUMF, L_HNUML, L_STNAME_C, L_PLACENAM, R_ADDDIRFG, R_HNUMF, R_HNUML, R_STNAME_C, R_PLACENAM, CLOSING, ROADJURIS, SPEED, TRAFFICDIR, geometry]
Index: []
为什么LINESTRING和MULTIPOLYGON几何之间的GeoPandas叠加交集为空?
1条答案
按热度按时间rslzwgfq1#
overlay
方法应应用于地理数据框或系列:intersection = bc_hrs.overlay(bc_roads_df, how='intersection')
下面是一些示例代码:
Image of plots