【发布时间】:2022-01-10 05:14:51
【问题描述】:
我需要找到美国边境 N 米内的所有点(名称、纬度、经度)。我的做法是:
- 制作一个包含多多边形的地理数据框,其中每个多边形都是一个缓冲边界。
# Get the U.S. borders
border = gpd.read_file('cb_2018_us_nation_5m')
border = border.to_crs("EPSG:32636")
# Get just the boundary
just_border = border.boundary
# Put a 10km buffer around the line. We now have multiple polygons (AK, HI, CONUS), each that look like a donut.
border_buffered = just_border.buffer(10000, cap_style=3, join_style=2)
然后将我的数据框转换为地理数据框。
gdf = gpd.GeoDataFrame(temp, geometry=gpd.points_from_xy(temp.Longitude, temp.Latitude))
gdf = gdf.set_crs("EPSG:32636")
然后裁剪多边形内的点。
ngdf = gpd.clip(gdf, border_buffered, keep_geom_type=False)
这没有找到点:
ngdf.shape
(0, 15)
所以我尝试使用面具:
gdf.reset_index(inplace=True)
gdf.shape
(25746326, 17)
pip_mask = gdf.within(border_buffered.loc[0, 'geometry'])
Traceback (most recent call last):
File "/Users/kovar/work/a50_utils/foo.py", line 45, in <module>
pip_mask = gdf.within(border_buffered.loc[0, 'geometry'])
File "/Users/kovar/miniforge3/envs/a50-dev/lib/python3.9/site-packages/pandas/core/indexing.py", line 889, in __getitem__
return self._getitem_tuple(key)
File "/Users/kovar/miniforge3/envs/a50-dev/lib/python3.9/site-packages/pandas/core/indexing.py", line 1063, in _getitem_tuple
self._has_valid_tuple(tup)
File "/Users/kovar/miniforge3/envs/a50-dev/lib/python3.9/site-packages/pandas/core/indexing.py", line 720, in _has_valid_tuple
self._validate_key_length(key)
File "/Users/kovar/miniforge3/envs/a50-dev/lib/python3.9/site-packages/pandas/core/indexing.py", line 761, in _validate_key_length
raise IndexingError("Too many indexers")
pandas.core.indexing.IndexingError: Too many indexers
我猜我的多边形太多了,或者缓冲的线太复杂了。
【问题讨论】:
-
1.您是否有要测试的点的样本数据? 2. 在边界 N 米内,是在(即德克萨斯州)和外部(即墨西哥)内,但在(即堪萨斯州)内排除在外
-
请在询问错误时发布entire traceback - 它们对调试非常有帮助;)看起来
border_buffered是GeoSeries,而不是GeoDataFrame,因为GeoDataFrame.boundary只返回一个@ 987654329@,所以只需border_buffered.loc[0]。
标签: geopandas