【问题标题】:Get US State for given location coordinates获取给定位置坐标的美国州
【发布时间】:2022-02-01 00:27:00
【问题描述】:

我想弄清楚 lat long 属于哪个州。为此,我使用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,那么我在这里缺少什么?

【问题讨论】:

  • 你能展示你的 df_poly.head(5) 吗?
  • @BENY 补充说。您也可以在这里找到该形状文件:census.gov/cgi-bin/geo/shapefiles/…
  • 您的几何图形似乎是(LON, LAT) 格式,而您提供的是(LAT, LON) 格式的点

标签: pandas geopandas shapely census


【解决方案1】:

您应该检查以下几点:

  1. 您是否使用了正确的顺序? Shapely 点使用 (x, y) 坐标,与 (lat, lon) 坐标的顺序相反。我会尝试翻转坐标,看看是否可行。

    例如,我看到您的一个坐标是这样的:“-81.74725 39.09538”如果您按(纬度,经度)顺序解释,它在南极洲。如果按 (x, y) 顺序解释,它在俄亥俄州。

  2. 您是否使用了正确的 SRID?人口普查数据通常使用 NAD83,但这是检查的好东西:

    print(df_poly.crs)
    
  3. 另一个好的完整性检查是查看每个多边形的质心,并验证它是否合理:

    df.geometry.centroid
    

    过去,我见过有人拥有data which was in the wrong SRID,并且不得不转换它。

【讨论】:

  • 我尝试运行 print(df_poly.crs) 并返回此 <Geographic 2D CRS: EPSG:4269>。需要换吗?
  • CRS 是 NAD83 的另一个名称,通常在 WGS84 的一米范围内。请参阅gis.stackexchange.com/questions/170839/… TL;DR:这取决于您的用例,但可能不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多