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

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

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

重点功能

功能一、地址解析

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

方法:getLocation

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

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

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

地址解析代码如下:

  1. function geocoder() {
  2. map.clearMap();
  3. var myGeo = new AMap.Geocoder();
  4. //地理编码,返回地理编码结果
  5. myGeo.getLocation($addressBox.value, function(status, result) {
  6. if (status === 'complete' && result.info === 'OK') {
  7. //地址解析成功
  8. geocoder_CallBack(result);
  9. }
  10. else{
  11. //地址解析失败
  12. $pointBox.innerHTML = "查无此地址";
  13. }
  14. });
  15. }

回调函数如下:

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

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

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

AMap.Map 构造一个地图对象

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

地图事件:

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

在地图中心打点:

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

其他功能

1.显示地图

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

2.展示标注

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

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

截图:

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

全部源代码:

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
  7. <title>收货地址</title>
  8. <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=0250860ccb5953fa5d655e8acf40ebb7&plugin=AMap.Geocoder"></script>
  9. <script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
  10. <style>
  11. #addressBox{height:20px;width:600px;}
  12. #mapBox{height:400px;width:600px}
  13. #pointBox{height:20px;width:600px;}
  14. </style>
  15. <body>
  16. <div>
  17. <input id="addressBox" type="text" value="请输入结构化地址,例如北京市朝阳区望京街道首开广场" />
  18. <input id="" type="button" onclick="geocoder();" value="搜索" />
  19. </div>
  20. <div id='pointBox'>&nbsp;</div>
  21. <div id='mapBox'></div>
  22. <div>
  23. 使用方法:<br />
  24. 1.输入地址,点击搜索<br />
  25. 2.如果不够准确,可以拖动地图改变经纬度
  26. </div>
  27. <script type="text/javascript">
  28. var $addressBox = document.getElementById('addressBox');
  29. var $pointBox = document.getElementById("pointBox");
  30.  
  31. //创建地图
  32. var map = new AMap.Map("mapBox", {
  33. resizeEnable: true,
  34. center: [116.397428, 39.90923],
  35. zoom:14
  36. });
  37.  
  38. //添加标注
  39. function addMarker(point) {
  40. var marker = new AMap.Marker({
  41. map: map,
  42. position: [ point.getLng(), point.getLat()]
  43. });
  44. }
  45.  
  46. //地图中心点添加标注
  47. function addCenterPoint(){
  48. map.clearMap();
  49. var centerPoint = map.getCenter();
  50. addMarker(centerPoint);
  51. $pointBox.innerHTML = "当前经纬度为:" + centerPoint.getLng() + ',' + centerPoint.getLat();
  52. }
  53. addCenterPoint();
  54.  
  55. function geocoder() {
  56. map.clearMap();
  57. var myGeo = new AMap.Geocoder();
  58. //地理编码,返回地理编码结果
  59. myGeo.getLocation($addressBox.value, function(status, result) {
  60. if (status === 'complete' && result.info === 'OK') {
  61. //地址解析成功
  62. geocoder_CallBack(result);
  63. }
  64. else{
  65. //地址解析失败
  66. $pointBox.innerHTML = "查无此地址";
  67. }
  68. });
  69. }
  70.  
  71. //地理编码返回结果展示
  72. function geocoder_CallBack(data) {
  73. var resultStr = "";
  74. var geocode = data.geocodes;
  75. addMarker(geocode[0].location);
  76. resultStr += "当前坐标</b>:" + geocode[0].location.getLng() + ", " + geocode[0].location.getLat();
  77. map.setFitView();
  78. $pointBox.innerHTML = resultStr;
  79. }
  80.  
  81. map.on('moveend', function() {
  82. addCenterPoint();
  83. });
  84. </script>
  85. </body>
  86. </html>

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

  1. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  2. 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解

    目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...

  3. 『动善时』JMeter基础 — 30、JMeter中JSON断言详解

    目录 1.JSON断言组件界面详解 2.JSON断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)JSON断言界面内容 (4)查看运行结果 (5)断言结果组件说明 3.JS ...

  4. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

  5. 百度地图api,点击标注,改变标注marker图标的链接地址

    改变选中的图标样式 // 选中高亮标注图片 let mapIcon = ‘./icon.png’; //标注点 let markerArrs = [{},{},....]; // 点击标注点 mark ...

  6. vue构造函数(根实例化时和组件实例对象选项)参数:选项详解

    实例选项(即传给构造函数的options):数据,DOM,生命周期钩子函数,资源,组合,其他 数据 data 属性能够响应数据变化,当这些数据改变时,视图会进行重渲染. 访问方式: 1.通过 vm.$ ...

  7. 高仿淘宝送货地址暴走漫画系列(附demo)

    演讲: 我是个程序员,一天我坐在路边一边喝水一边苦苦检查bug. 这时一个乞丐在我边上坐下了,開始要饭,我认为可怜.就给了他1块钱. 然后接着调试程序.他可能生意不好,就无聊的看看我在干什么.然后过了 ...

  8. SOSO街景地图 API (Javascript)开发教程(1)- 街景

    SOSO街景地图 Javascript API 干什么用的? 你想在网页里嵌入个地图,就需要它了! 另外,它还支持:地点搜索.周边/附近查询.地图标注.公交/驾车路线规划.地理坐标与地址相互转换.地理 ...

  9. 【百度地图API】如何区分地址解析和智能搜索?

    原文:[百度地图API]如何区分地址解析和智能搜索? 摘要: 很多用户一直无法区分地址解析geocoder和智能搜索localsearch的使用场景.该文章用一个详尽的示例,充分展示了这两个类,共5种 ...

随机推荐

  1. C++矩阵运算库armadillo配置笔记

    前言 最近在用C++实现神经网络模型,优化算法需要用到矩阵操作,一开始我用的是boost的ublas库,但用着用着感觉很不习惯,接口不够友好.于是上网搜索矩阵运算哪家强,大神们都推荐armadillo ...

  2. dropbear

    生成ssh连接所需要的公钥,如下: /usr/bin/dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key     (dss加密,长度默认 ...

  3. [Shell]条件判断与流程控制:if, case, for, while, until

    ---------------------------------------------------------------------------------------------------- ...

  4. mybatis 打印sql 语句

    拦截器 package com.cares.asis.mybatis.interceptor; import java.text.DateFormat; import java.util.Date; ...

  5. 万万没想到,3D打印居然可以做这些逆天设计

    3D打印一直被冠以“高科技”头衔,似乎离我们的日常生活还很遥远.其实不然,随着技术的创新,3D打印技术逐渐深入各个领域,工业生产.商业.医学.建筑.艺术等领域都能看到3D打印技术的影子.它将会改变我们 ...

  6. php使用openssl来实现RSA(非对称加密)

    使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密. 1.安装openssl和PHP的openssl扩展 2.生成私钥:openssl genrsa 用于生成 ...

  7. 【转】jquery validate验证框架与kindeditor使用需二次提交的问题

    原文:http://blog.csdn.net/wlsyn/article/details/11536399在使用jquery的验证框架对kindeditor富文本编辑器进行验证的过程中,发现提 交时 ...

  8. LeetCode:Permutations, Permutations II(求全排列)

    Permutations Given a collection of numbers, return all possible permutations. For example, [1,2,3] h ...

  9. Web Api 中返回JSON的正确做法

    在使用Web Api的时候,有时候只想返回JSON:实现这一功能有多种方法,本文提供两种方式,一种传统的,一种作者认为是正确的方法. JSON in Web API – the formatter b ...

  10. OWIN的理解和实践(二) – Host和Server的开发

    对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host和Server来实现一个简单的 ...