You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从邮政编码级别的shapefile中提取美国本土区域

Python中移除邮政编码Shapefile中小岛的解决方案

针对你手中的美国人口普查局ZCTA Shapefile,以下是两种基于面积过滤移除小岛的实现方式:

方法一:利用现有面积字段快速过滤

你的数据中已经包含ALAND20字段(记录陆地面积,单位为平方米),直接基于该字段设置阈值过滤即可:

import geopandas as gpd

# 读取原始Shapefile
gdf = gpd.read_file("cb_2017_us_zcta510_500k.shp")

# 设置面积阈值(单位:平方米,可根据需求调整)
area_threshold = 10000

# 保留面积不小于阈值的区域
filtered_gdf = gdf[gdf["ALAND20"] >= area_threshold]

# 保存处理后的文件
filtered_gdf.to_file("filtered_zcta.shp")

方法二:手动计算多边形面积过滤(无现成面积字段时使用)

如果数据中没有自带的面积字段,或者需要直接基于几何图形计算面积,需先转换到等面积投影坐标系(避免经纬度坐标系计算面积的误差):

import geopandas as gpd

gdf = gpd.read_file("cb_2017_us_zcta510_500k.shp")

# 转换为北美阿尔伯斯等面积投影(EPSG:5070,适合美国本土及阿拉斯加区域)
gdf_proj = gdf.to_crs(epsg=5070)

# 计算每个多边形的面积(单位:平方米)
gdf_proj["calc_area"] = gdf_proj.geometry.area

# 设置阈值并过滤
area_threshold = 10000
filtered_gdf_proj = gdf_proj[gdf_proj["calc_area"] >= area_threshold]

# 可选:转换回原坐标系
filtered_gdf = filtered_gdf_proj.to_crs(gdf.crs)

# 保存结果
filtered_gdf.to_file("filtered_zcta.shp")

注意事项

  • 面积阈值需根据实际需求调整,比如针对阿拉斯加的小岛可适当降低阈值
  • 必须使用等面积投影坐标系计算面积,否则经纬度坐标系下的面积结果无实际地理意义

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:50:14