geopandas.sjoin_nearest#
- geopandas.sjoin_nearest(left_df: geopandas.geodataframe.GeoDataFrame, right_df: geopandas.geodataframe.GeoDataFrame, how: str = 'inner', max_distance: Optional[float] = None, lsuffix: str = 'left', rsuffix: str = 'right', distance_col: Optional[str] = None) geopandas.geodataframe.GeoDataFrame #
基于两个GeoDataFrame几何图形之间的距离进行空间连接。
结果将包括单个输入记录的多个输出记录,其中存在多个等距离、最近的或相交的邻居。
距离以CRS单位计算,可以使用 distance_col 参数。
有关更多详细信息,请参阅用户指南页面https://geopandas.readthedocs.io/en/latest/docs/user_guide/mergingdata.html。
- 参数
- left_df, right_dfGeoDataFrames
- how字符串,缺省为‘内部’
联接的类型:
‘Left’:使用Left_df中的键;仅保留Left_df几何列
‘right’:使用right_df中的密钥;仅保留right_df几何列
‘ner’:使用来自两个DFS的键的交集;仅保留LEFT_DF几何列
- max_distance浮动,默认为无
查询最近几何图形的最大距离。必须大于0。通过减少为树中最近的项目求值的输入几何体的数量,用于在树中搜索最近项的max_Distance可能会对性能产生重大影响。
- lsuffix字符串,默认为‘Left’
应用于重叠列名的后缀(左GeoDataFrame)。
- rsuffix字符串,默认为‘Right’
应用于重叠列名的后缀(右GeoDataFrame)。
- distance_col字符串,默认为无
如果设置,则将计算的匹配几何图形之间的距离保存在关联的GeoDataFrame中此名称的列下。
参见
sjoin
二元谓词连接
GeoDataFrame.sjoin_nearest
等效法
注意事项
由于此连接依赖于距离,因此如果几何图形位于地理CRS中,则结果将不准确。
GeoPandas中的每个操作都是平面的,即没有考虑潜在的第三维。
示例
>>> countries = geopandas.read_file(geopandas.datasets.get_path("naturalearth_lowres")) >>> cities = geopandas.read_file(geopandas.datasets.get_path("naturalearth_cities")) >>> countries.head(2).name pop_est continent name iso_a3 gdp_md_est geometry 0 920938 Oceania Fiji FJI 8374.0 MULTIPOLYGON (((180.00000 -16.06713, 180.00000... 1 53950935 Africa Tanzania TZA 150600.0 POLYGON ((33.90371 -0.95000, 34.07262 -1.05982... >>> cities.head(2).name name geometry 0 Vatican City POINT (12.45339 41.90328) 1 San Marino POINT (12.44177 43.93610)
>>> cities_w_country_data = geopandas.sjoin_nearest(cities, countries) >>> cities_w_country_data[['name_left', 'name_right']].head(2) name_left geometry index_right pop_est continent name_right iso_a3 gdp_md_est 0 Vatican City POINT (12.45339 41.90328) 141 62137802 Europe Italy ITA 2221000.0 1 San Marino POINT (12.44177 43.93610) 141 62137802 Europe Italy ITA 2221000.0
要包括距离,请执行以下操作:
>>> cities_w_country_data = geopandas.sjoin_nearest(cities, countries, distance_col="distances") >>> cities_w_country_data[["name_left", "name_right", "distances"]].head(2) name_left name_right distances 0 Vatican City Italy 0.0 1 San Marino Italy 0.0
在下面的示例中,我们获得了意大利的多个城市,因为所有结果都是等距离的(在本例中为零,因为它们相交)。事实上,我们总共得到了3个结果:
>>> countries_w_city_data = geopandas.sjoin_nearest(cities, countries, distance_col="distances", how="right") >>> italy_results = countries_w_city_data[countries_w_city_data["name_left"] == "Italy"] >>> italy_results name_x name_y 141 Vatican City Italy 141 San Marino Italy 141 Rome Italy