如何从多面体中提取邮政编码?

How to extract zip codes from multipolygons?

我有一个包含公用事业公司服务区域的地理数据框。每个地理数据框都有一个多面体来表示公司提供服务的区域。我正在尝试构建一个数据框,其中可以用邮政编码表示这些多面体。

数据框如下所示:

例如,目标是第一家公用事业公司,如果几何重叠 10 个邮政编码,则新数据框将有十行具有相同的公用事业公司名称和 ID。

我以前对单个经度和纬度坐标进行过反向地理编码,但从未使用过多边形。网络上的大部分资源都涉及将邮政编码转换为多边形,而不是相反。

编辑:下方的邮政编码地理数据框

所以基本上您需要做的就是使用 gpd.sjoin。如果您只想要其他数据框中的邮政编码,您只需使用如下内容:

with_zip = gpd.sjoin(utility_gdf,zipcode_gdf[['ZIP_CODE','geometry']],how='left',op='intersects')

进一步参考请参阅: Merging Data - GeoPandas

编辑:

查看几何图形后,这两个数据集实际上使用了不同的坐标参考系统。让两个 crs 匹配是一个两步过程;

  1. 转换crs
  2. 在geoseries上设置crs类型

但首先,您需要弄清楚每个数据集当前使用的是什么crs。 要查找每个 gdf ​​使用的 crs,只需键入

gdf.geometry.crs

如果其中一个数据集有 'NoneType' crs,您将不得不进行一些谷歌搜索以弄清楚它实际使用的是什么 crs。

一旦你弄清楚你有哪些crs,你就可以转换它。 这是一个关于转换 crs 的非常好的线程: GIS stack exchange thread

然后,一旦您将实际的几何数据点转换为新的 crs,您就需要设置适当的 geoseries crs 类型。例如,如果您将 gdf1.geometry 从“EPSG:2966”转换为“EPSG:4236”,您将调用:

gdf1.set_crs("EPSG:4236",inplace=True,allow_override=True)

然后然后您可以重试合并操作。