python-3.x - 将地理区域划分为大小相等的网格并检索索引位置

标签 python-3.x pandas geopy

我有北京地区人员流动的 GPS 坐标。我想将地理空间划分为例如 2 平方公里(三角洲)的矩形网格,并访问网格内任何点的索引位置。单元格的大小不必完全相等,在我的情况下可以使用近似值。

我的地理区域具有以下边界框坐标(纬度、经度)。

Bottom Left  (x1,y1) = 39.77750000, 116.17944444  
Top Left     (x1,y2) = 40.04722222, 116.58888889  
Bottom Right (x2,y1) = 39.77750000, 116.58888889  
Top Right    (x2,y2) = 40.04722222, 116.17944444  

这是一个 30 公里 x 34 公里的矩形区域。 我心目中的解决方案是以delta为2km,将纬度和经度值递增delta直到达到上界。
获取GPS点p的索引位置,令BL为矩形区域的左下角

Row =    Distance [(p.lat,BL.long), (BL.lat, BL.long)] / delta 
Column = Distance [(BL.lat,p.long), (BL.lat, BL.long)] / delta 

有没有更简单的方法或支持库来解决这个问题?最好结合行和列(x,y),这样我就可以通过在笛卡尔坐标系中找到两个网格单元之间的距离来测量网格单元的紧密度。示例图像和输入数据集可能会让您清楚地了解描述。

enter image description here

链接中给出的输入数据集 https://drive.google.com/file/d/1JjvS7igTmrtLA4E5Rs5D6tsdAXqzpYqX/view

最佳答案

bottomLeft = (39.77750000, 116.17944444)
bottomRight = (39.77750000, 116.58888889)
topLeft = (40.04722222, 116.58888889)
topRight = (40.04722222, 116.17944444)

cols = np.linspace(bottomLeft[1], bottomRight[1], num=18)
rows = np.linspace(bottomLeft[0], topLeft[0], num=15)
df['col'] = np.searchsorted(cols, df['long'])
df['row'] = np.searchsorted(rows, df['lat'])

关于python-3.x - 将地理区域划分为大小相等的网格并检索索引位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573164/

相关文章:

python - Geopy:计算 GPS 航向/方位

python - 为什么我的地理定位不起作用?

python - 使用 python 将数据文件从源工作表转换为目标工作表格式。

python - 将方法 python 替换为多个值

python - 确定每天的员工级别

python - 从数据透视表绘制 Pandas DataFrame

python - Google App Engine 不支持 Geopy?

python - 如何在python中打印出两个 "|"之间的子字符串?

python-3.x - 用 Manim 同时显示两个动画

arrays - 识别 Pandas DataFrame 列的类型 DataFrame 值的 numpy 数组