检查多边形中的点(状态)和Map状态

41zrol4v  于 2022-10-22  发布在  Python
关注(0)|答案(1)|浏览(215)

我正在尝试将Point数据Map到地理位置(即美国各州)。
我想创建一个“状态”列,通过使用geojson数据检查点是否属于特定状态,该数据具有形状几何格式的多边形数据,以及多边形数据所在的美国州。
我似乎没有正确的逻辑来实现这一点。以下是我的尝试:

def map_states(row):
for ind, row in dfpoly.iterrows():
    polygon = shape(row['geometry'])
    if polygon.contains(dfpoints['Point'][ind]):
        return dfpoly['state']

一旦逻辑正确,我想使用apply在我的数据中创建states列:

dfpoints['states'] = dfpoints.apply(map_states, axis=1)

感谢任何帮助。谢谢

mwg9r5ms

mwg9r5ms1#

要纠正/测试您的逻辑,请将您的逻辑与此进行比较。

import geopandas as gpd

city_pnts = gpd.read_file(gpd.datasets.get_path("naturalearth_cities"))
country_pgns = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))

def inside_country( city_point_geom ):
    for indx, row in country_pgns.iterrows():
        pgon = row.geometry
        country_name = row["name"]
        if pgon.contains(city_point_geom):
            print(country_name)
            return country_name
        else:
            #print("Fails!")
            pass
        pass

运行上面的代码,然后执行此代码。


# Get one of a city's geometry by number

# and check what country it is inside

number = 20
inside_country(city_pnts.geometry.values[number])

这将返回:

'Switzerland'

如果您使用更新版本的geopandas,请尝试以下操作

result1_gdf = city_pnts.sjoin(country_pgns)
result2_gdf = country_pgns.sjoin(city_pnts)

看看你在result1/2_gdf地理 Dataframe 中得到了什么。

相关问题