All Articles

高德地图 API

1. 前言

地图服务主要就百度和高德两家,百度的API之前有接过,这次简单尝试下高德的API。基本上可以说大同小异,没什么本质差别。大概从一些客制化的方面会有些差别吧,主要是一些比较细节的功能方面。

API主页:高德开放平台

2. 账号申请与准备

首先进行账号注册,然后到console创建API Key:

  • 创建应用:左边栏 应用管理 > 我的应用 => 右上部按钮 创建新应用
  • 添加Key:在创建出来的应用,右上部按钮 添加
    • 这里注意,有两类KEY是比较常用的:
      • Web端(JS API):这个KEY是用在浏览器内,或内嵌Web端的,e.g 地图选点组件
      • Web服务:这个KEY是用在restful api调用的,e.g curl …
    • 这两者的名字有一定的误导性,注意使用时的区分,一般可以把前者称为WebKey,后者称为ApiKey

API Key是后续调用接口的关键,所以首先需要创建这两者。

3. 常用API

全体Web API的列表可以到这里查阅文档:开发 > Web服务 API > 入门指南

3.1 逆地理编码

实际上就是根据经纬查找地点信息:文档

$ curl "https://restapi.amap.com/v3/geocode/regeo?output=json&location=116.310003,39.991957&key=2e06f02c891a78a0b3860e75ebc8702b&radius=100"
{
  "status": "1",
  "regeocode": {
    "addressComponent": {
      "city": [],
      "province": "北京市",
      "adcode": "110108",
      "district": "海淀区",
      "towncode": "110108015000",
      "streetNumber": {
        "number": "5号",
        "location": "116.310454,39.992734",
        "direction": "东北",
        "distance": "94.5489",
        "street": "颐和园路"
      },
      "country": "中国",
      "township": "燕园街道",
      "businessAreas": [
        []
      ],
      "building": {
        "name": "北京大学",
        "type": "科教文化服务;学校;高等院校"
      },
      "neighborhood": {
        "name": "北京大学",
        "type": "科教文化服务;学校;高等院校"
      },
      "citycode": "010"
    },
    "formatted_address": "北京市海淀区燕园街道北京大学"
  },
  "info": "OK",
  "infocode": "10000"
}
  • 这个API返回的city是空数组,不太清楚是不是因为直辖市的原因
  • 注意这里的formatted_address,后面可以结合另一个API使用

3.2 地理编码

可以根据3.1里提到的formatted_address来查找具体的地点信息:文档

$ curl "https://restapi.amap.com/v3/geocode/geo?key=2e06f02c891a78a0b3860e75ebc8702b&address=北京市海淀区燕园街道北京大学"
{
  "status": "1",
  "info": "OK",
  "infocode": "10000",
  "count": "1",
  "geocodes": [
    {
      "formatted_address": "北京市海淀区北京大学",
      "country": "中国",
      "province": "北京市",
      "citycode": "010",
      "city": "北京市",
      "district": "海淀区",
      "township": [],
      "neighborhood": {
        "name": [],
        "type": []
      },
      "building": {
        "name": [],
        "type": []
      },
      "adcode": "110108",
      "street": [],
      "number": [],
      "location": "116.305469,39.989481",
      "level": "兴趣点"
    }
  ]
}

3.3 选址组件

开发 > 地图组件 > 开发指南 > 选址组件文档

需要注意,这个组件和刚才的2个API不同,刚才的2个API使用的是Web服务API Key,而这个组件则需要使用Web端(JS API)API Key。千万不要搞错了。

内嵌一个iframe到web页面上之后,就可以通过文档中的代码进行初始化。当用户点击下面的地址列表中的某一个地址时,就会触发事件,返回给开发者以下信息:

{
  "address": "颐和园路5号",
  "location": "116.310003,39.991957",
  "name": "北京大学"
}

3.4 套路

一般来说可以这样做:

  • 在app或web中嵌入3.3 选址组件,然后获得用户所选地点的经纬度
  • 然后将经纬度传入3.1 逆地理编码获得到formatted_address
  • 最后通过3.2 地理编码来获得地点的省市等信息

根据3.1和3.2两者的返回,可以拼装出完整的地点信息。

EOF

Published 2021/9/25

Some tech & personal blog posts