• 高德地图抓路服务


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

    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 '''
  • 相关阅读:
    POJ 2027
    POJ 2017
    重定位(转载)
    常见储存器件的分辨(RAM、SRAM、SDRAM、ROM、FLASH、Nand Flash、Nor Flash、DDR、eMMC)
    虚拟机安装配置ubuntu共享文件夹
    ARM芯片时钟体系
    串行通信协议 —— UART
    串行通信协议——基础知识
    内存地址和内存空间
    中断与异常
  • 原文地址:https://www.cnblogs.com/slfh/p/10773390.html
Copyright © 2020-2023  润新知