首先,需要安装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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录