区域划分网格 GPS轨迹生成对应网格ID【python】


功能:对设定的区域进行网格划分,给定一个位置,计算其网格ID
输入:区域边界,网格大小,经纬度坐标
输出:网格ID


在这里插入图片描述

from geopy.distance import geodesic
import math

bounds=[120,25,130,35]  #区域范围(最小经度,最小纬度,最大经度,最大纬度)
size=18 #网格尺寸,这里设定为18km(实际地理距离)
##### 函数:写一个自动化的函数,计算区域能划分出的行数、列数等信息  #####
def autoGenerateRowColNum(lat1,lat2,lon1,lon2):
    latDist=geodesic((lat1,1),(lat2,1)).km  #纬度上横跨多少公里
    lonDist=geodesic((1,lon1),(1,lon2)).km  #经度上横跨多少公里
    rowNum=math.ceil(latDist/size)
    colNum=math.ceil(lonDist/size)
    sumNum=rowNum*colNum
    rowWidth=(lat2-lat1)/rowNum
    colWidth=(lon2-lon1)/colNum
    return rowNum,colNum,sumNum,rowWidth,colWidth

#### 调用上边的函数,对我们设定的区域生成网格属性 ####
rowNum,colNum,sumNum,rowWidth,colWidth=autoGenerateRowColNum(bounds[1],bounds[-1],bounds[0],bounds[-2])

### 函数:利用上边计算好的网格属性,任意给定经纬度,计算其网格id ###
def generateID(lat,lon):
    commmon=int((lon-bounds[0])/colWidth)+1+int((lat-bounds[1])/rowWidth)*colNum  #正常的就是这么计算
    #如果这个点出现在了右边界或者上边界,我们需用强行调整他们的网格ID,不要跑出边界
    if lat==bounds[-1]:
        commmon-=colNum
    if lon==bounds[-2]:
        commmon-=1
    return commmon
## 调用函数,生成给定位置的网格ID
id = generateID(30.2519, 122.29861)
print(id)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值