用户需求:管理者需要录入一批商户,并在地图上把商户展示出来。但发现一些商户的地址描述并不清楚,导致商户位置出错。如何获得更加准确的商户位置呢?

分析:假设地址准确的,可以通过地址解析,得到准确的经纬度。假设地址缺失,我们通过人工打点的办法,获取精准的位置。可以参考淘宝的收货地址,如下图。

------------------------------------------------------------------------------------------------------

重点功能

功能一、地址解析

方法:AMap.Geocoder
说明:地理编码与逆地理编码服务,用于地址描述与坐标间的相互转换

方法:getLocation

说明:根据给定的地址描述进行解析

当地址解析成功时,执行回调函数,将该地址对应的经纬度显示出来,并在该点打个标注

当地址解析失败时,告诉用户“查无此地址”

地址解析代码如下:

function geocoder() {map.clearMap();var myGeo = new AMap.Geocoder();//地理编码,返回地理编码结果myGeo.getLocation($addressBox.value, function(status, result) {if (status === 'complete' && result.info === 'OK') {//地址解析成功
            geocoder_CallBack(result);}else{//地址解析失败$pointBox.innerHTML = "查无此地址";}});
}

回调函数如下:

//地理编码返回结果展示
function geocoder_CallBack(data) {var resultStr = "";var geocode = data.geocodes;addMarker(geocode[0].location);resultStr += "当前坐标</b>:" + geocode[0].location.getLng() + ", " + geocode[0].location.getLat();map.setFitView();$pointBox.innerHTML = resultStr;
}

功能二、拖拽地图,获取经纬度

给map添加地图事件,当事件触发时,在地图中心打点

AMap.Map 构造一个地图对象

moveend 地图移动结束后触发,包括平移和缩放。如地图有拖拽缓动效果,则在缓动结束后触发

地图事件:

map.on('moveend', function() {addCenterPoint();
});

在地图中心打点:

//地图中心点添加标注
function addCenterPoint(){map.clearMap();var centerPoint = map.getCenter();addMarker(centerPoint);$pointBox.innerHTML = "当前经纬度为:" + centerPoint.getLng() + ',' + centerPoint.getLat();
}
addCenterPoint();

其他功能

1.显示地图

//创建地图
var map = new AMap.Map("mapBox", {resizeEnable: true,center: [116.397428, 39.90923],zoom:14
});

2.展示标注

//添加标注
function addMarker(point) {var marker = new AMap.Marker({map: map,position: [ point.getLng(),  point.getLat()]});
}

------------------------------------------------------------------------------------------------------

截图:

示例查看:http://zhaoziang.com/amap/deliver_address.htm

全部源代码:

<!doctype html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"><title>收货地址</title><script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=0250860ccb5953fa5d655e8acf40ebb7&plugin=AMap.Geocoder"></script><script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script><style>#addressBox{height:20px;width:600px;}#mapBox{height:400px;width:600px}#pointBox{height:20px;width:600px;}</style>
<body>
<div><input id="addressBox" type="text" value="请输入结构化地址,例如北京市朝阳区望京街道首开广场" /><input id="" type="button" οnclick="geocoder();" value="搜索" />
</div>
<div id='pointBox'>&nbsp;</div>
<div id='mapBox'></div>
<div>
使用方法:<br />
1.输入地址,点击搜索<br />
2.如果不够准确,可以拖动地图改变经纬度
</div>
<script type="text/javascript">
var $addressBox = document.getElementById('addressBox');
var $pointBox = document.getElementById("pointBox");//创建地图
var map = new AMap.Map("mapBox", {resizeEnable: true,center: [116.397428, 39.90923],zoom:14
});//添加标注
function addMarker(point) {var marker = new AMap.Marker({map: map,position: [ point.getLng(),  point.getLat()]});
}//地图中心点添加标注
function addCenterPoint(){map.clearMap();var centerPoint = map.getCenter();addMarker(centerPoint);$pointBox.innerHTML = "当前经纬度为:" + centerPoint.getLng() + ',' + centerPoint.getLat();
}
addCenterPoint();function geocoder() {map.clearMap();var myGeo = new AMap.Geocoder();//地理编码,返回地理编码结果myGeo.getLocation($addressBox.value, function(status, result) {if (status === 'complete' && result.info === 'OK') {//地址解析成功
            geocoder_CallBack(result);}else{//地址解析失败$pointBox.innerHTML = "查无此地址";}});
}//地理编码返回结果展示
function geocoder_CallBack(data) {var resultStr = "";var geocode = data.geocodes;addMarker(geocode[0].location);resultStr += "当前坐标</b>:" + geocode[0].location.getLng() + ", " + geocode[0].location.getLat();map.setFitView();$pointBox.innerHTML = resultStr;
}map.on('moveend', function() {addCenterPoint();
});
</script>
</body>
</html>

转载于:https://www.cnblogs.com/milkmap/p/6126424.html

【地图API】地址录入时如何获得准确的经纬度?淘宝收货地址详解相关推荐

  1. java excel中重复数据 事务处理_Java导出excel时合并同一列中相同内容的行思路详解...

    一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...

  2. java 导出如何合并列_Java导出excel时合并同一列中相同内容的行思路详解

    一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...

  3. 百度地图API搜索关键词定位,点击获取经纬度

    一.实现效果如下 二.获取百度地图秘钥AK (1)申请秘钥地址 http://lbsyun.baidu.com/apiconsole/key (2)创建应用 (3)选择应用类型 我这个demo是在浏览 ...

  4. 位地址和字节地址换算_面试常考,项目易错,长文详解C/C++中的字节对齐

    (给CPP开发者加星标,提升C/C++技能) 作者:技术让梦想更伟大 / 李肖遥 (本文来自作者投稿) 我们先来看看以下程序 //编译器:https://tool.lu/coderunner///来源 ...

  5. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

  6. 二、8.根据一个收件人列表,输出姓名:xxx 电话:xxx 收货地址:xxx姓名:xxx 电话:xxx 收货地址:xxx的格式.

    作业 infos = ["张三 北京市海淀区学霸村一巷666号 13466666666","李四 上海市浦东新区土豪路888号 13988888888",&qu ...

  7. dat文件导入cad画图步骤_准确又高效的读入CAD几何——详解Fluent Meshing导入文件的几种方法...

    对于我们流体工程师来讲,"仿真驱动设计"是常常被挂在嘴边的一句话.CFD的主要工作,也是将我们所熟识的物理现象,应用到特定的场景(产品)之中.那么,对于这些不一样的产品,对应的CA ...

  8. flink消费kafka时topic partitions 和并行度间的分配源码详解

    引言 当我们消费kafka的一个topic时,我们知道kafka partition 是和我们设置的并行度是一一对应的: 也就是说,假如我们的topic有12个分区,那我们就设置12个并行度,这样每个 ...

  9. proe输入数字时成双出现_Proe/Creo步进电机正反转仿真详解

    本教程对步进电机正反转进行仿真,设顺时针为正转,逆时针为反转,步进电机驱动转盘,转盘正转一圈,停止,反转半圈,停止,反转半圈. 1. 新建组件,添加电机57HS22-a,在默认位置装配,如下图: 2. ...

  10. 5000个收货地址_欠薪老赖和法院玩4年“躲猫猫”,双十一更新收货地址后被抓...

    原标题:欠薪老赖和法院玩4年"躲猫猫",双十一更新收货地址后被抓 11月11日,据杭州桐庐县人民法院微信公号,一名老赖欠薪5800元逃避4年.11月10日,桐庐法院发现该老赖更新了 ...

最新文章

  1. python 缺失值处理(Imputation)
  2. Simhash 网页重复
  3. 协方差、协方差矩阵的解释意义
  4. Hyper-V Server虚拟机快照(检查点)
  5. MYSQL 如果把数据文件保存到其他磁盘里
  6. 文件I/O实践(3) --文件共享与fcntl
  7. 采用循环链表结构求解约瑟夫问题
  8. Modelbuilder快速入门
  9. android socket_Android 10.0系统启动之Zygote进程(四)-「Android取经之路」
  10. 编写的软件在运行时界面不能移动_常用软件开发工具介绍
  11. linux rz sz使用
  12. 计算圆柱的侧面积及体积
  13. 网络安全_密码学实验_对称加密算法DES
  14. mysqldump逻辑备份
  15. 运动估计和最佳匹配块搜索算法
  16. JMockit Mock 私有方法和私有属性
  17. android修改系统默认时间
  18. UUNITY3D插件InControl的简单使用_安卓端连接蓝牙手柄
  19. hhuoj:1398 红与黑
  20. Spring boot + Dubbo timeout

热门文章

  1. spssχ2检验_SPSS教程:分层卡方检验(CMH检验)
  2. 163邮箱链接服务器失败是怎么回事,outlook邮箱添加163邮箱账户失败该怎么办?...
  3. 流水线、超流水线、超标量(superscalar)技术对比(转)
  4. PCWorld选出52个实用网站
  5. 【Python数据分析实战】豆瓣读书分析(含代码和数据集)
  6. idea工具(1):依赖包详解
  7. 天堂五章单机版怎么修改服务器,天堂2单机版第五章服务器无法运行
  8. SpringBoot2.x整合Redis数据库
  9. 可视化远程管理系统保障工地施工安全解决方案
  10. 和秋叶一起学PPT之线条(课时六)