如何从多边形中提取邮政编码?

问题描述

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

数据框如下所示:

enter image description here

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

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

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

enter image description here

解决方法

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

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

请参阅以获取更多参考: Merging Data - GeoPandas

编辑:

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

  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)

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