高德地图的Web应用

目前功能日渐丰富的web应用或APP都需要使用到地图定位、导航等功能,但是局限于自身的开发能力以及资源的限制,往往需要借助其他地图供应商的数据或服务来满足自己的需求。因此许多在线地图服务商在满足自身需求的前提下,作为第三方开放平台,为应用程序开发者提供了诸多地图服务的功能接口。
高德地图是阿里巴巴旗下的地理位置服务平台,提供了丰富的地图产品与服务。为各行各业制定了多种解决方案,尤其是货运和电商行业。目前我们系统用到的服务有地图定位、地图导航、路线规划、POI搜索、地图选点和物流轨迹等。

高德地图的使用

地图的引入和初始化以及一些基本图层和事件在官方文档都有,这里就不在描述了,接下来重点介绍我们项目中用的地图的重点业务场景。附带文档地址:https://lbs.amap.com/

地图拖拽选址

拖拽地图需要实时获取到标记点所在的详细地理位置,如下图所示:


这里用到了高德地图的 组件PositionPicker,用于在地图上选取位置,并获取所选位置的地址信息,以及周边POI、周边道路、周边路口等信息

    const positionPicker = new PositionPicker({
      mode: 'dragMap',
      map: mapObj//地图初始化后的地图对象
    });
    positionPicker.on('success', function (positionResult) {
      console.log(positionResult)
    });
    positionPicker.start();

拖拽成功后返回值positionResult包含的数据格式如下


图中我们可以看到,返回的信息包括的省市区的名称和详细地址,最关键的还有县区的行政编码,通过此编码可以推出市级和省级编码。这样通过地图选址后的地址就可以转换成三级省市区联动的下拉框数据。

地图模糊搜索

在拖拽选址基础上我们还需要能够进行模糊搜索直接定位到目标地点附近。搜索需要用到高德地图组件PoiPicker,在给定的输入框上集成输入提示和关键字搜索功能,方便用户选取特定地点(即POI)。

    const poiPicker = new PoiPicker({
      input: searchInputRef,// 搜索需要的输入框DOM
      placeSearchOptions: {
        map: mapObj,// 初始化后的地图对象
        pageSize: 10
      },
      searchResultsContainer: searchResultsRef,// 呈现搜索结果的DOM
      city: '西安',// 搜索的城市范围
    });

初始化PoiPicker之前需要提前在地图DOM对象处增加搜索输入框和呈现搜索结果的容器,位置和样式需要自己提前处理好。初始化完后输入框输入关键字,容器中则会呈现对应的搜索结果。

搜索大明宫

监听搜索结果的选择事件:

//监听poi选中信息
  poiPicker.on('poiPicked', function(poiResult) {
    //用户选中的poi点信息
    const { source, item} = poiResult;
    if (source === 'suggest') {
        poiPicker.searchByKeyword(item.name);
    } else { console.log(item) }
  });

poiResult数据格式如下

{
    source: 'search',       //信息来源,search代表搜索服务,suggest代表输入提示,如果是输入提示则需要再次进行关键词搜索
    item: {
        "id": "B000A8WXY0", //poi点的id
        "name": "***",      //名称
        "location": lnglat, //经纬度,AMap.LngLat实例,
        "address": "***",    //地址信息
        "adcode":"",//区县编码
        "adname":"",//区县名称
        "cityname":"",//市级名称
        "pname":"",//省名称
    }
}

至此,我们可以看到最终获取到的数据与上述拖拽选址得到的结果一致,满足业务需求。
温馨提示:一些直辖市或者省辖县可能会出现行政编码不满足省市区3级联动下拉框,需要进行特殊处理,这里不在赘述。

地理编码服务

有时候可能会做一些老数据的兼容处理,在我们系统中一些地址信息老数据只省市区和详细地址两个字符串,没有省市区的行政编码,这种在后续业务处理上会非常困难,所以我们要尽可能的将这些老数据解析为带行政编码的数据,这个时候就需要地图的地理编码服务。

AMap.plugin('AMap.Geocoder', function() {
  var geocoder = new AMap.Geocoder()

  geocoder.getLocation('北京市海淀区苏州街', function(status, result) {
    if (status === 'complete' && result.info === 'OK') {
      // result中对应详细地理坐标信息
    }
  })
})

其中 result信息如表格所示

属性 类型 说明
info String 成功状态说明
geocodes Array.<Geocode> 地理编码结果,仅地理编码返回
resultNum Number 地理编码结果数目,仅地理编码返回
regeocode ReGeocode 逆地理编码结果,仅逆地理编码返回

geocodes中包含的信息就是每一个地理坐标对象

属性 类型 说明
addressComponent AddressComponent 地址组成元素
formattedAddress String 格式化地址规则:地址信息=基本行政区信息+具体信息;基本行政信息=省+市+区+乡镇
location LngLat 坐标
adcode String 区域编码
level String 给定地址匹配级别,返回匹配最详细级别,如:“北京市海淀区苏州街”匹配级别为“道路”详见匹配级别列表

addressComponent则包含了上述拖拽选址和模糊搜索的地理位置字段,有provincecitycitycodedistrictadcode等,根据这些字段,可以精确的获取到省市区名称和编码,这样新的地理数据就转换好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容