【发布时间】:2023-01-19 01:06:31
【问题描述】:
我想按卫生区域划分不列颠哥伦比亚省的公路网。具体来说,对于每个健康区域,我想保存该区域内道路的形状文件。道路具有 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: []
为什么 GeoPandas 叠加交集在 LINESTRING 和 MULTIPOLYGON 几何图形之间为空?
【问题讨论】:
标签: python gis intersection geopandas