python 如何在邮政编码级别阻止美国大陆访问shapefile?

68de4m5k  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(100)

我已经从人口普查局下载了zip code级别的大型.shapefile
链接在这里:cb_2017_us_zcta510_500k.shp(https://www2.census.gov/geo/tiger/TIGER_RD18/LAYER/ZCTA520/)问题是,读入geopandas显示,很明显,它包括阿拉斯加和周围的所有小岛。

gg.head(1)
Out[709]: 
  ZCTA5CE20 GEOID20 CLASSFP20 MTFCC20 FUNCSTAT20    ALAND20  \
0     35592   35592        B5   G6350          S  298552385   

   AWATER20   INTPTLAT20    INTPTLON20  \
0    235989  +33.7427261  -088.0973903   

                                                                                                                                                                                                  geometry  
0  POLYGON ((-88.24735 33.65390, -88.24713 33.65415, -88.24656 33.65454, -88.24658 33.65479, -88.24672 33.65497, -88.24672 33.65520, -88.24626 33.65559, -88.24601 33.65591, -88.24601 33.65630, -88.24...

我知道在R中有一个简单的解决方案(使用多边形的面积,参见how to remove all the small islands from the Census Shapefile (zip code level)?),但是在Python中我能做什么呢?
谢谢!

2ul0zpep

2ul0zpep1#

这当然可以使用CONUS形状定义文件来完成;然而,美国大陆具有落入边界框内的便利属性(并且所有非美国大陆的地理区域都落在边界框之外)。因此,最简单的方法是使用边界框进行过滤:

# generous bounding box
x1, y1, x2, y2 = (-130, 20, -50, 50)

gg_wgs84 = gg.to_crs('epsg:4326')
gg_conus = gg[
    (gg_wgs84.centroid.x > x1)
    & (gg_wgs84.centroid.y > y1)
    & (gg_wgs84.centroid.x < x2)
    & (gg_wgs84.centroid.y < y2)
]

相关问题