gpt4 book ai didi

python - Geopandas 包含一个点的工作,但不是很多

转载 作者:行者123 更新时间:2023-12-01 06:40:50 28 4
gpt4 key购买 nike

我需要过滤多边形内数据帧的行。我的多多边形存储在 gdf_polygon 中,我的点存储在 gdf ​​中。这是他们的外观的一些简历。

gdf_polygon
id geometry
0 MULTIPOLYGON (((39.81239 21.43429, 39.81445 21...

gdf
id geometry
0 POINT (50.05832 26.43992)
... ...

问题是,当我尝试检查其中是否有任何点时返回False,但我知道多边形内部有一些点。

基本上,如果我运行它,我会得到 False 作为输出。

gdf_polygon.geometry.contains(gdf.geometry).any()

否则,如果我运行此命令,我将得到 True 作为输出,因为该点位于多边形内部。

gdf_polygon.geometry.contains(gdf.geometry[141828])

我知道我可以迭代 gdf 的所有行并为每一行运行包含,但由于我的数据集非常大(大约 30.000.000 行),这将非常低效。所以我正在寻找解释或可能的修复方法。

我的数据框创作是:

 crs = {'init': 'epsg:4326'}

df = pd.read_csv(FOLDER+file, compression='gzip', escapechar='\\')

geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]
gdf = gpd.GeoDataFrame(df,crs=crs, geometry=geometry)

inside = gdf.geometry.within(gdf_polygon.geometry)

最佳答案

当比较 contains 中的两个 GeoSeries 时,geopandas 会将它们对齐,请参阅 https://gis.stackexchange.com/questions/345785/geopandas-intersect-function-gives-different-result-to-shapely/345822#345822进行解释。

为了使您的代码按预期工作,您需要将点的 GeoSeries 与多多边形几何本身进行比较。反之亦然,使用 within

polygon = gdf_polygon.geometry.iloc[0]
gdf.geometry.within(polygon)

关于python - Geopandas 包含一个点的工作,但不是很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59461445/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com