【问题标题】:Why is GeoPandas overlay intersection empty between LINESTRING and MULTIPOLYGON geometries?为什么 GeoPandas 叠加交集在 LINESTRING 和 MULTIPOLYGON 几何图形之间为空?
【发布时间】:2023-01-19 01:06:31
【问题描述】:

我想按卫生区域划分不列颠哥伦比亚省的公路网。具体来说,对于每个健康区域,我想保存该区域内道路的形状文件。道路具有 LINESTRING 几何形状,而健康区域具有 MULTIPOLYGON 几何形状。

我认为 geopandas overlayhow=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


    【解决方案1】:

    overlay 方法应该应用于地理数据框或系列:

    intersection = bc_hrs.overlay(bc_roads_df, how='intersection')

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 2015-04-29
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多