自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 3425|回复: 10
打印 上一主题 下一主题

[应用案例] 【高德地图API】从零开始学高德JS API(八)——地址解析..

[复制链接]
最佳答案
5 

22

主题

760

帖子

1877

积分

超级版主

Rank: 8Rank: 8

积分
1877
QQ
跳转到指定楼层
楼主
发表于 2014-8-27 11:57:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要:无论是百度LBS开放平台,还是高德LBS开放平台,其调用量最高的接口,必然是定位,其次就是地址解析了,又称为地理编码。地址解析,就是将地址转换为经纬度。而逆地址解析,就是将经纬度转换为地址。经纬度一般是由专业测绘机构用GPS采集,然后使用国测局接口加密,最后呈现在互联网地图上的。而地址,这里说的是结构化的带街道门牌号的地址,比如“北京市朝阳区阜通东大街6号”,这个地址是由公安局颁发的。而将地址和经纬度一一对应起来,这个就是高德地图做的事情了,也就是地址解析接口的功能了。地址解析功能,实用性强,调用频次高,谷歌API的地址解析接口甚至是收费的!所以,现在有现成免费的接口,大家应该很开心呀。
---------------------------------------------------------------------------
使用高德提供的AMap.Geocoder插件即可实现地址解析,和逆地址解析。
地理编码类是指将地址信息和地理坐标点信息进行相互转化,包括将地址信息转换为地理坐标点的编码和将地理坐标点转换为地址信息的逆地理编码。
1、地理编码
地理编码是将地址信息转换为地理坐标点信息,你可以使用此项功能在指定位置添加一个点或是定位地图上的某个位置。接口为:
geocoder.getLocation("北京市海淀区苏州街");
代码:
[url=][/url]
var geocoder; //加载地理编码插件 mapObj.plugin(["AMap.Geocoder"]function(){  geocoder=new AMap.Geocoder({ radius:1000 //以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息 city:"010"//城市,默认:"全国" }); //返回地理编码结果 AMap . event . addListener(geocoder "complete"geocoder_callBack); geocoder.getLocation("北京市海淀区苏州街"); });[url=][/url]


效果图:

2、逆地理编码
逆地理编码又称位置描述或地址解析,即从已知的经纬度坐标到对应的地址描述(如省市、街区、楼层、房间等)的转换。接口为:
geocoder.getAddress(lnglatXY);
代码:
[url=][/url]
var geocoder; var lnglatXY=new AMap.LngLat(116.39657439.992706); //加载地理编码插件 mapObj.plugin(["AMap.Geocoder"]function(){  geocoder=new AMap.Geocoder({ radius:1000 //以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息 extensions: "all"//返回地址描述以及附近兴趣点和道路信息,默认"base" }); //返回地理编码结果 AMap . event . addListener(geocoder "complete"geocoder_callBack); //逆地理编码geocoder.getAddress(lnglatXY); }); [url=][/url]


效果图:

3、全部源代码
[url=][/url]
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>地址解析</title><link rel="stylesheet"type="text/css" href="zero.css" /><script language="javascript" src="http://webapi.amap.com/maps?v=1.3&key=【您的key】"></script></head><bodyonLoad="mapInit()">    <div id="iCenter"></div>    <div id="iControlbox">        <ul>            <li>                <input type="text" id="key_11" value="116.51413"/>                <input type="text" id="key_12" value="39.912896" />                <button onclick="javascript:geocoder2();">逆地址解析</button>            </li>            <li>                <input type="text" id="key_2" value="北京市朝阳区大屯路304号" />                <button onclick="javascript:geocoder();">地址解析</button>            </li>        </ul>    </div>    <div id="result"></div></body><script language="javascript">var mapObj;var result;var marker = [];var windowsArr = [];functionmapInit () {    mapObj = new AMap.Map('iCenter');    //默认定位:初始化加载地图时,center及level属性缺省,地图默认显示用户所在城市范围};var MGeocoder;varkey_11;var key_12;var key_2;function geocoder2() {  //POI搜索,关键字查询    key_11 = document.getElementById("key_11").value;    key_12 =document.getElementById("key_12").value;    var lnglatXY = new AMap.LngLat(key_11key_12);    //document.getElementById('result').innerHTML = "您输入的是:" + key_1;    //加载地理编码插件    mapObj.plugin(["AMap.Geocoder"] function() {               MGeocoder = new AMap.Geocoder({            radius: 1000            extensions:"all"        });        //返回地理编码结果        AMap.event.addListener(MGeocoder "complete" geocoder_CallBack2);        //逆地理编码        MGeocoder.getAddress(lnglatXY);    });    //加点    var marker = new AMap.Marker({        map:mapObj        icon: new AMap.Icon({            image:"http://api.amap.com/Public/images/js/mark.png"            size:new AMap.Size(5830)            imageOffset: new AMap.Pixel(-32 -0)        })        position: lnglatXY        offset: new AMap.Pixel(-5-30)    });    mapObj.setFitView();}//鼠标划过显示相应点var marker2;function onMouseOver (e) {    var coor = e.split('')        lnglat = newAMap.LngLat(coor[0] coor[1]);    if (!marker2) {        marker2 = new AMap.Marker({            map:mapObj            icon: "http://webapi.amap.com/images/0.png"            position: lnglat            offset: new AMap.Pixel(-10 -34)        });    } else {        marker2.setPosition(lnglat);    }    mapObj.setFitView();}functiongeocoder_CallBack2(data) { //回调函数    var resultStr = "";    var roadinfo ="";    var poiinfo="";    var address;    //返回地址描述    address =data.regeocode.formattedAddress;    //返回周边道路信息    roadinfo +="<table style='width:600px'>";    for(var i=0;i<data.regeocode.roads.length;i++){        varcolor = (i % 2 === 0 ? '#fff' : '#eee');        roadinfo += "<tr style='background-color:" + color + "; margin:0; padding:0;'><td>道路:" + data.regeocode.roads.name+ "</td><td>方向:" + data.regeocode.roads.direction + "</td><td>距离:" + data.regeocode.roads.distance + "米</td></tr>";    }    roadinfo +="</table>"   //返回周边兴趣点信息    poiinfo += "<table style='width:600px;cursor:pointer;'>";    for(var j=0;j<data.regeocode.pois.length;j++){        var color = j % 2 === 0 ?'#fff' : '#eee';        poiinfo += "<tr onmouseover='onMouseOver(\"" + data.regeocode.pois[j].location.toString() + "\")' style='background-color:" + color + "; margin:0; padding:0;'><td>兴趣点:" + data.regeocode.pois[j].name + "</td><td>类型:" + data.regeocode.pois[j].type + "</td><td>距离:" +data.regeocode.pois[j].distance + "米</td></tr>";    }    poiinfo += "</table>";    //返回结果拼接输出    resultStr = "<div style=\"font-size: 12px;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;\">"+"<b>地址</b>:"+ address + "<hr/><b>周边道路信息</b>:<br/>" + roadinfo + "<hr/><b>周边兴趣点信息</b>:<br/>" + poiinfo +"</div>";    document.getElementById("result").innerHTML = resultStr;} function geocoder() {  //地理编码返回结果展示    key_2 =document.getElementById("key_2").value;          mapObj.plugin(["AMap.Geocoder"] function() {     //加载地理编码插件        MGeocoder = new AMap.Geocoder();        //返回地理编码结果        AMap.event.addListener(MGeocoder "complete" geocoder_CallBack);                MGeocoder.getLocation(key_2);  //地理编码    });} //地理编码返回结果展示  function geocoder_CallBack(data){    var resultStr="";    //地理编码结果数组    var geocode = new Array();    geocode = data.geocodes;     for (var i =0; i < geocode.length; i++) {        //拼接输出html        resultStr += "<span style=\"font-size: 12px;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;\">"+"<b>地址</b>:"+geocode.formattedAddress+""+ "<b>    坐标</b>:" + geocode.location.getLng() +" "+ geocode.location.getLat() +""+ "<b>    匹配级别</b>:" + geocode.level +"</span>";          addmarker(i geocode);    }     mapObj.setFitView();      document.getElementById("result").innerHTML = resultStr; }function addmarker(i d) {    var lngX = d.location.getLng();    var latY = d.location.getLat();    var markerOption = {        map:mapObj                        icon:"http://webapi.amap.com/images/"+(i+1)+".png"         position:new AMap.LngLat(lngX latY)    };               var mar = new AMap.Marker(markerOption);     marker.push(new AMap.LngLat(lngX latY));     var infoWindow = new AMap.InfoWindow({         content:d.formattedAddress        autoMove:true        size:newAMap.Size(1500)         offset:{x:0y:-30}    });     windowsArr.push(infoWindow);          var aa = function(e){infoWindow.open(mapObjmar.getPosition());};     AMap.event.addListener(mar"click"aa); }</script></html>[url=][/url]


demo地址:http://zhaoziang.com/amap/zero_8_1.html



回复

使用道具 举报

最佳答案
0 

9

主题

111

帖子

349

积分

中级会员

Rank: 3Rank: 3

积分
349
沙发
发表于 2014-10-8 10:24:42 | 只看该作者
你发的demo无法访问啊?
温馨提示:该网站暂时无法进行访问
原因一:根据工信部相关法规,您尚未进行备案;

原因二:根据工信部相关法规,您当前的接入商不是万网或阿里云;

原因三:您的网站可能存在不适宜传播的信息,请联系网站管理员。

本页面为默认提示页面,如网站存在以上问题请及时进行处理。

阿里云用户备案请登录阿里云代备案管理系统 ;万网用户备案请登录万网代备案管理系统 ;

谢谢合作!
回复 支持 反对

使用道具 举报

最佳答案
5 

22

主题

760

帖子

1877

积分

超级版主

Rank: 8Rank: 8

积分
1877
QQ
板凳
 楼主| 发表于 2014-10-8 11:07:48 | 只看该作者
zhoumh1988 发表于 2014-10-8 10:24
你发的demo无法访问啊?
温馨提示:该网站暂时无法进行访问
原因一:根据工信部相关法规,您尚未进行备案 ...

Hi 部署的是测试机,尽快恢复,感谢反馈!
回复 支持 反对

使用道具 举报

最佳答案
0 

2

主题

4

帖子

52

积分

注册会员

Rank: 2

积分
52
地板
发表于 2015-1-21 11:39:09 | 只看该作者
zhoumh1988 发表于 2014-10-8 10:24
你发的demo无法访问啊?
温馨提示:该网站暂时无法进行访问
原因一:根据工信部相关法规,您尚未进行备案 ...

可以访问啊
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1

帖子

10

积分

新手上路

Rank: 1

积分
10
5#
发表于 2015-2-9 16:26:51 | 只看该作者
嘎嘎的,看看
回复 支持 反对

使用道具 举报

最佳答案
0 

4

主题

22

帖子

92

积分

注册会员

Rank: 2

积分
92
6#
发表于 2015-6-15 12:57:23 | 只看该作者
详细简单容易使人简单明白我觉得还是不错的bestsdk
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
7#
发表于 2015-11-8 12:38:49 | 只看该作者
怎么把那个起点,终点的logo去掉呢?
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
8#
发表于 2015-11-16 18:12:21 | 只看该作者
你好,高德英文版的地图怎么导入啊
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
9#
发表于 2016-1-18 11:30:14 | 只看该作者
有没有批量地址
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

9

帖子

31

积分

新手上路

Rank: 1

积分
31
10#
发表于 2016-3-23 10:17:37 | 只看该作者
逆地址解析,国外坐标,直接报错是什么情况? 有了解的吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表