两个地理序列的指数是不同的--理解指数

2022-04-09 00:00:00 python geopandas geospatial geo

问题描述

我正在使用GeoPandas,我有两个GeoDataframes和相同的CRS。其中一个包含带有多边形geometrygeometry列,另一个包含带有点geometry的列。我想检查哪些点在多边形内部。

我天真地尝试

shape.contains(points)

这给了我

>  The indices of the two GeoSeries are different

我不理解此消息。当我检查documentation时,它显示

我们还可以逐行检查两个GeoSeries。上面的GeoSeries有不同的指数。我们可以根据索引值对齐两个GeoSeries并使用Align=True将元素与相同索引进行比较,或者使用Align=False忽略索引并根据元素的匹配顺序进行比较:

这些指数是什么?为什么要相互核对,而不是geometry columns? 我在网上读到,我必须将我的几何图形转换为shapely几何图形。但使用GeoPandas的全部意义不就是我可以对数据执行地理操作吗?

我对此感到困惑。如何检查shape中的geometries是否包含points中的任何geometries


解决方案

您所描述的实际上是一个空间连接。下面的例子从英国城市的经度/纬度构造点,然后找出城市所在的行政区域多边形。这是NxM比较

import pandas as pd
import numpy as np
import geopandas as gpd
import shapely.geometry
import requests

# source some points and polygons
# fmt: off
dfp = pd.read_html("https://www.latlong.net/category/cities-235-15.html")[0]
dfp = gpd.GeoDataFrame(dfp, geometry=dfp.loc[:,["Longitude", "Latitude",]].apply(shapely.geometry.Point, axis=1))
res = requests.get("https://opendata.arcgis.com/datasets/69dc11c7386943b4ad8893c45648b1e1_0.geojson")
df_poly = gpd.GeoDataFrame.from_features(res.json())
# fmt: on

gpd.sjoin(dfp, df_poly)

相关文章