写一个程序将带有OD坐标点经纬度的excel文件导入程序可批量计算OD带之间的距离经纬度数据基于GCJ-02坐标系
首先,需要安装pandas和geopy两个Python库。pandas用于读取和处理Excel文件,geopy用于计算距离。
代码如下:
import pandas as pd
from geopy.distance import geodesic
# 读取Excel文件
df = pd.read_excel('data.xlsx')
# 转换经纬度坐标系为GCJ-02
def gcj02_to_wgs84(lng, lat):
a = 6378245.0
ee = 0.00669342162296594323
pi = 3.14159265358979324
def transformlat(lng, lat):
ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * \
pow(lng, 2) + 0.1 * pow(lat, 2) + 0.1 * pow(lng, 2) * lat + \
0.1 * lng * pow(lat, 2) + 0.2 * pow(lng, 2) * lat
return ret
def transformlng(lng, lat):
ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \
0.1 * lng * lat + 0.1 * lat * lat + 0.1 * \
pow(lng, 2) + 0.2 * lng * lat + \
0.2 * pow(lat, 2) + 0.1 * pow(lng, 2) * lat + \
0.1 * lng * pow(lat, 2) + 0.2 * pow(lng, 2) * lat
return ret
dlat = transformlat(lng - 105.0, lat - 35.0)
dlng = transformlng(lng - 105.0, lat - 35.0)
radlat = lat / 180.0 * pi
magic = math.sin(radlat)
magic = 1 - ee * magic * magic
sqrtmagic = math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
mglat = lat + dlat
mglng = lng + dlng
return mglng, mglat
# 计算两个坐标点之间的距离
def calculate_distance(p1, p2):
return geodesic(p1, p2).km
# 批量计算OD带之间的距离
for i in range(len(df)):
origin = df.iloc[i]['origin']
dest = df.iloc[i]['dest']
origin_lng, origin_lat = gcj02_to_wgs84(df.iloc[i]['origin_lng'], df.iloc[i]['origin_lat'])
dest_lng, dest_lat = gcj02_to_wgs84(df.iloc[i]['dest_lng'], df.iloc[i]['dest_lat'])
p1 = (origin_lat, origin_lng)
p2 = (dest_lat, dest_lng)
distance = calculate_distance(p1, p2)
print('OD带{}和{}之间的距离为{}公里'.format(origin, dest, distance))
其中,data.xlsx为Excel文件名,存储了每个OD带的编号、经纬度等信息。在程序中,通过读取Excel文件,将每个OD带的经纬度坐标系转换为GCJ-02坐标系,并计算两个坐标点之间的距离,最后输出结果。
原文地址: https://www.cveoy.top/t/topic/bwS2 著作权归作者所有。请勿转载和采集!