高德地图抓路服务

Posted slfh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高德地图抓路服务相关的知识,希望对你有一定的参考价值。

需求:根据给定的经纬度,获取对应的地图上的点,以及该点所在地段道路名称及限速

1、相关信息

(1)WGS84与GCJ02

WGS84:世界标准地理坐标系

GCJ02:中国国测局地理坐标系

当前所有的经纬度数据使用的坐标系是WGS84,高德地图经纬度数据使用的坐标系是GCJ02,因此若想获取高德地图上相对应的经纬度坐标处的相关信息就需要进行WGS84到GCJ02坐标系的转换

(2)高德地图抓路服务相关使用

抓路服务API:https://lbs.amap.com/fn/autograsp/

技术图片

 

根据页面介绍,首先需要注册账号,此处略过,若已有账号,如何申请key值,此处简单介绍一下。点击申请Key跳转到应用管理页面

技术图片

 创建一个新应用,按照个人所需输入应用名称和应用类型。新创建的应用如下,没有key值

技术图片

点击当前应用右上角的”+“添加key值,在出现的页面选择自己需要的服务,输入相关信息,点击提交之后,即可创建该应用对于该服务的key值

技术图片

 

 

 技术图片

2、简单尝试

技术图片

 

(1)坐标转换

 

#import urllib
import math
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 偏心率平方

def wgs84_to_gcj02(lng, lat):
    """
    WGS84转GCJ02(火星坐标系)
    """
    if out_of_china(lng, lat):  # 判断是否在国内
        return lng, lat
    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 _transformlat(lng, lat):
    ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat +           0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))
    ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
            math.sin(2.0 * lng * pi)) * 2.0 / 3.0
    ret += (20.0 * math.sin(lat * pi) + 40.0 *
            math.sin(lat / 3.0 * pi)) * 2.0 / 3.0
    ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *
            math.sin(lat * pi / 30.0)) * 2.0 / 3.0
    return ret

def _transformlng(lng, lat):
    ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng +           0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))
    ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
            math.sin(2.0 * lng * pi)) * 2.0 / 3.0
    ret += (20.0 * math.sin(lng * pi) + 40.0 *
            math.sin(lng / 3.0 * pi)) * 2.0 / 3.0
    ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *
            math.sin(lng / 30.0 * pi)) * 2.0 / 3.0
    return ret

def out_of_china(lng, lat):
    return not (lng > 73.66 and lng < 135.05 and lat > 3.86 and lat < 53.55)
if __name__ == __main__:
    result84to02 = wgs84_to_gcj02(116.216516, 28.223563)
    print(result84to02)

(2)时间转换

要求输入时间为utc时间,因此需要转换时间

附上连接:https://time.is/Unix_time_converter

(3)示例及结果

carid:XXXX123456

locations:116.22142876920546,28.220271135633453|116.22123409873669,28.220431363983824|116.22103942943106,28.22058959349244

time:1533320970,1533320972,1533320973

direction:312,312,312

speed:93,93,93

技术图片

3、代码获取

 1 import requests
 2 import json
 3 import pandas as pd 
 4 r = requests.get("https://restapi.amap.com/v3/autograsp?key=&carid=XXXX123456&locations=116.22142876920546,28.220271135633453|116.22123409873669,28.220431363983824|116.22103942943106,28.22058959349244&time=1533320970,1533320972,1533320973&direction=312,312,312&speed=93,93,93")
 5 obj=json.loads(r.text)#将json格式字符串转为json
 6 #print(obj)
 7 print(obj["roads"][0])
 8 print(obj["roads"][1])
 9 print(obj["roads"][2])
10 ‘‘‘
11 结果展示
12 {‘roadname‘: ‘G70福银高速‘, ‘crosspoint‘: ‘116.22143,28.22027‘, ‘roadlevel‘: ‘41000‘, ‘maxspeed‘: ‘120‘, ‘intersection‘: [], ‘intersectiondistance‘: ‘-1‘}
13 {‘roadname‘: ‘G70福银高速‘, ‘crosspoint‘: ‘116.22123,28.220427‘, ‘roadlevel‘: ‘41000‘, ‘maxspeed‘: ‘120‘, ‘intersection‘: [], ‘intersectiondistance‘: ‘-1‘}
14 {‘roadname‘: ‘G70福银高速‘, ‘crosspoint‘: ‘116.22104,28.220587‘, ‘roadlevel‘: ‘41000‘, ‘maxspeed‘: ‘120‘, ‘intersection‘: [], ‘intersectiondistance‘: ‘-1‘}
15 ‘‘‘

 

以上是关于高德地图抓路服务的主要内容,如果未能解决你的问题,请参考以下文章

高德地图怎样实现实时定位,得到当前地点的坐标,位置

高德地图收不到品牌定位怎么回事

HTML5怎么用高德地图API返回当前位置的经纬度

高德地图怎样定位自己

android 高德地图定位服务启动失败 怎么破

高德地图老是提醒请求服务失败