pandas 获取给定位置坐标的美国州

3pmvbmvn  于 2023-04-28  发布在  其他
关注(0)|答案(1)|浏览(115)

我想弄清楚一个纬度属于哪个州。为此,我使用了US Census和shapely库提供的形状文件。这就是我到目前为止所尝试的:

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

df_poly = gpd.read_file("data/tl_2019_us_state.shp")
df_poly = df_poly[['GEOID', 'geometry']].set_index('GEOID')
display(df_poly.head(5))
geometry
GEOID 
54        POLYGON ((-81.74725 39.09538, -81.74635 39.096...
12        MULTIPOLYGON (((-86.38865 30.99418, -86.38385 ...
17        POLYGON ((-91.18529 40.63780, -91.17510 40.643...
27        POLYGON ((-96.78438 46.63050, -96.78434 46.630...
24        POLYGON ((-77.45881 39.22027, -77.45866 39.220...
p1 = Point(map(float, (29.65, -95.17)))
any(df_poly['geometry'].contains(p1))
False

但我尝试的任何坐标都返回False。例如,上面的坐标来自德克萨斯州,但仍然返回False,那么我在这里遗漏了什么?

8yoxcaq7

8yoxcaq71#

以下是您应该检查的几件事:
1.你用正确的顺序来表达这一点吗?Shapely点使用(x,y)坐标,其顺序与(lat,lon)坐标相反。我会尝试翻转坐标看看是否有效
例如,我看到你的一个坐标是这样的:“-81.74725 39.09538“如果你按(lat,lon)顺序解释,那是在南极洲。如果你按照(x,y)的顺序来解释,它在俄亥俄州。
1.您是否使用了正确的SRID?人口普查数据通常使用NAD 83,但这是一个很好的检查:

print(df_poly.crs)

1.另一个好的健全性检查是查看每个多边形的质心,并验证它是否合理:

df.geometry.centroid

在过去,我见过一些人的数据在错误的SRID中,不得不转换它。

相关问题