我有一个使用GPS的Android应用,并将其报告给后端。由于某种原因(我猜是模拟位置或gps精度较低),许多测量值的坐标都超出了陆地。
我正在编写python pandas / geopandas短代码来过滤掉这些代码,但似乎并不那么琐碎。
我最初的想法是将已注册的GPS点与高分辨率(10m)地形连接起来。
#
# df initial dataframe with points
geometry=[Point(xy) for xy in zip(df.longitude, df.latitude)]
crs = {'init': 'epsg:4326'}
geodf = gp.GeoDataFrame(df[['longitude','latitude']],geometry = geometry, crs=crs)
world = gp.read_file("../GeoPandas/natural-earth-vector/10m_physical/ne_10m_land.shp")
gpd_joined = gp.sjoin(geodf,world, how='inner', op='intersects', lsuffix='left', rsuffix='right')
但是,海岸线上可能存在假阳性(形状文件不准确?)。我想保留这些样品。 (蓝色-陆地多边形,标记-标记为删除的点)
一般来说,我的想法是通过删除最明显的区域来清理场景,例如在海洋中部,在海岸线周围保持“边界缓冲区”。
不幸的是,我不知道如何创建这样的边框/缓冲区。使用scale
函数进行简单扩展的多边形会从其最大中心点开始按比例放大多边形。我想实现的目标是将其均匀地扩展到所需的大小。
然后我尝试使用“海洋”形状并将其缩小比例
gdfOceansSS.geometry.scale(xfact=0.9, yfact=0.9, zfact=1.0, origin=(0,0,0))
但没有成功。
任何提示表示赞赏!
答案 0 :(得分:0)
OMG我刚刚发现,简单的gp.buffer可以完成工作:
gdfWorldSS.geometry = world.geometry.buffer(1)