经纬度和距离转换

工作中我们经常遇到1经度或1纬度对应的距离,以及有了距离相应的经纬度差是多少

1、1公里对应的经纬度差

如果地球是个规则的球体,其周长是40076千米,那么1个360度的经度圈周长也是40076千米(和赤道圈一样),推断出1度经度的距离是40076/360=111千米;而1纬度的距离和它所在的纬度带有关。

import numpy  as np
import math
# 区域范围
bound = {}
bound['min_lon'] = 102.2  # min_lon
bound['min_lat'] = 24.5  # min_lat
bound['max_lon'] = 103.5884  # max_lon
bound['max_lat'] = 26.5436  # max_lat
"""
目的:将此区域划按照1公里网格进行划分
转换:因为此处区域单位是经纬度,所以需要将距离(1公里)转换成经纬度
"""
grid_length=1  #网格边长是1公里

mid_lat=(bound['min_lat']+bound['max_lat'])/2#中间纬度
lon_to_km=111*np.cos(math.pi*mid_lat/180)  #1经度差距离 角度转弧度: π/180×角度  1度纬度弧长=111*cos(纬度),1度弧长相当于1度経度差
lat_to_km=111  #1纬度差距离等于1经度长度

length_lon=grid_length/lon_to_km #1公里对应経度差
length_lon=grid_length/lat_to_km
#求此区域1公里对应的経度差、纬度差
grid_lon_arange=np.arange(bound['min_lon'],bound['max_lon'],lon_to_km)
grid_lat_arange=np.arange(bound['min_lat'],bound['max_lat'],lon_to_km)

2、有了距离求相应的经纬度差

from scipy.stats import norm  # 提供高斯噪声
import numpy  as np
import math
usages=np.array([[102.705443,  25.08218 ],
       [102.919635,  25.086187],
       [102.711445,  25.064534],
       [102.652288,  25.093385],
       [102.638036,  25.07871 ],
       [102.816516,  24.983468]])
service_length=1 #标准差等于服务半径
min_lat=usages[0][1]
max_lat=usages[len(usages)-1][1]
mid_lat=(min_lat+max_lat)/2

bias1 = norm.rvs(scale=service_length, size=len(usages)) #经度偏离位置
bias1_lon=bias1*(1/(111*np.cos(math.pi*mid_lat/180)))
bias2 = norm.rvs(scale=service_length, size=len(usages)) #纬度偏离位置
bias2_lat=bias2*(1/111)

usages=usages+np.array([bias1_lon,bias2_lat]).T

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值