如何使用Python中的geopandas测试点是否在多边形/多边形中?

Kam*_*mel 11 python point polygon pandas geopandas

我从arcgis网站上获得了来自美国各州的多边形数据, 并且还有一个包含城市坐标的 Excel 文件。我已将坐标转换为几何数据(点)。现在我想测试积分是否在美国。两者都是 dtype: 几何。我认为这样我可以很容易地进行比较,但是当我使用我的代码时,我得到的每个点的答案都是错误的。即使有在美国的积分。

代码是:

import geopandas as gp
import pandas as pd
import xlsxwriter
import xlrd
from shapely.geometry import Point, Polygon

df1 = pd.read_excel('PATH')
gdf = gp.GeoDataFrame(df1, geometry= gp.points_from_xy(df1.longitude, df1.latitude))

US = gp.read_file('PATH')

print(gdf['geometry'].contains(US['geometry']))
Run Code Online (Sandbox Code Playgroud)

有人知道我做错了什么吗?

mar*_*eis 13

contains在 GeoPandas 中,当前以一对一的配对方式工作,而不是一对多。为此,请使用sjoin.

points_within = gp.sjoin(gdf, US, predicate='within')
Run Code Online (Sandbox Code Playgroud)

这将仅返回 中的那些点US。或者,您可以过滤包含点的多边形。

polygons_contains = gp.sjoin(US, gdf, predicate='contains')
Run Code Online (Sandbox Code Playgroud)