首页 > 技术文章 > python调用百度地图API得到两地经纬度计算直线距离

boom-meal 2020-02-26 19:02 原文

程序简介

程序封装了两个函数
一、调用百度地图的API来获得地点的经纬度
二、调用python的geopy模块来计算两个经纬度的直线距离
输入:地点名称
输出:经纬度、直线距离

程序/数据集下载

点击进入下载地址

代码分析

申请百度地图API(懒得申请可以直接点击上面的下载地址,里面有我个人的应用)
进入网站http://lbsyun.baidu.com/apiconsole/key登录后进入控制台创建应用,点击应用可以看到应用的AK和SK码

导入模块、填写AK、SK码

# -*- coding: utf-8 -*-
from geopy.distance import geodesic
import urllib.parse
import hashlib
import requests

ak = "xxxxxxxxxxx"#百度地图ak码
sk = "xxxxxxxxxxx"#百度地图sk码

getCoordinate函数可以根据地名来获得对应经纬度,这里拿秦皇岛做测试

def getCoordinate(address):
    '''
    输入地址输出坐标(经度,维度)
    address:城市名
    '''
    #产生sn码
    queryStr = "/geocoder/v2/?address="+address+'&output=json&ak='+ak
    encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
    rawStr = encodedStr+sk
    sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())
    #生成url      
    url = urllib.parse.quote("http://api.map.baidu.com"+queryStr+"&sn="+sn,safe="/:=&?#+!$,;'@()*[]")
    result = requests.get(url).json()
    coordinate = (result['result']['location']['lng'],result['result']['location']['lat'])
    return coordinate
print('秦皇岛经纬度',getCoordinate('秦皇岛'))
秦皇岛经纬度 (119.60853063334328, 39.941748102377936)

calDistance函数可以根据两地名来获得对应其直线距离,其中需要调用到上面的getCoordinate函数来获取坐标,这里拿北京、秦皇岛做测试

def calDistance(place1,place2):
    '''
    输入两个地点名,输出直线距离(米)
    place1:地点1
    place2:地点2
    '''
    coor1 = getCoordinate(place1)#经纬度1
    coor2 = getCoordinate(place2)#经纬度2
    #这里输入纬度在前,经度在后,所以做一下反转
    distance = geodesic(coor1[::-1],coor2[::-1]).m#距离(米)
    return distance
distance = calDistance("北京市","秦皇岛市")
print("秦皇岛、北京距离约为%d米"%distance)
秦皇岛、北京距离约为273145米

推荐阅读