【地图API】地址录入时如何获得准确的经纬度?淘宝收货地址详解
用户需求:管理者需要录入一批商户,并在地图上把商户展示出来。但发现一些商户的地址描述并不清楚,导致商户位置出错。如何获得更加准确的商户位置呢?
分析:假设地址准确的,可以通过地址解析,得到准确的经纬度。假设地址缺失,我们通过人工打点的办法,获取精准的位置。可以参考淘宝的收货地址,如下图。

------------------------------------------------------------------------------------------------------
重点功能
功能一、地址解析
方法: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" onclick="geocoder();" value="搜索" />
</div>
<div id='pointBox'> </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>
【地图API】地址录入时如何获得准确的经纬度?淘宝收货地址详解的更多相关文章
- 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 ...
- 『动善时』JMeter基础 — 31、JMeter中BeanShell断言详解
目录 1.BeanShell简介 2.Beanshell的内置变量和方法 3.BeanShell断言界面详解 4.BeanShell断言的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 ...
- 『动善时』JMeter基础 — 30、JMeter中JSON断言详解
目录 1.JSON断言组件界面详解 2.JSON断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)JSON断言界面内容 (4)查看运行结果 (5)断言结果组件说明 3.JS ...
- 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解
目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...
- 百度地图api,点击标注,改变标注marker图标的链接地址
改变选中的图标样式 // 选中高亮标注图片 let mapIcon = ‘./icon.png’; //标注点 let markerArrs = [{},{},....]; // 点击标注点 mark ...
- vue构造函数(根实例化时和组件实例对象选项)参数:选项详解
实例选项(即传给构造函数的options):数据,DOM,生命周期钩子函数,资源,组合,其他 数据 data 属性能够响应数据变化,当这些数据改变时,视图会进行重渲染. 访问方式: 1.通过 vm.$ ...
- 高仿淘宝送货地址暴走漫画系列(附demo)
演讲: 我是个程序员,一天我坐在路边一边喝水一边苦苦检查bug. 这时一个乞丐在我边上坐下了,開始要饭,我认为可怜.就给了他1块钱. 然后接着调试程序.他可能生意不好,就无聊的看看我在干什么.然后过了 ...
- SOSO街景地图 API (Javascript)开发教程(1)- 街景
SOSO街景地图 Javascript API 干什么用的? 你想在网页里嵌入个地图,就需要它了! 另外,它还支持:地点搜索.周边/附近查询.地图标注.公交/驾车路线规划.地理坐标与地址相互转换.地理 ...
- 【百度地图API】如何区分地址解析和智能搜索?
原文:[百度地图API]如何区分地址解析和智能搜索? 摘要: 很多用户一直无法区分地址解析geocoder和智能搜索localsearch的使用场景.该文章用一个详尽的示例,充分展示了这两个类,共5种 ...
随机推荐
- 检查python模块是否成功安装
例如,检查HTMLTestRunner模块是否成功安装(血淋淋的例子) 一个模块未成功安装,在直接运行python程序是不会报错,但是会提示类似于以下的错误 AttributeError: 'xxxx ...
- html添加网络音乐
IE浏览器,其他的不一定适应 <embed src="http://www.kmfhsj.com/fish-photo/music/xiaochenggushi.mp3" a ...
- mui学习笔记
一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...
- mybatis generate 自动生成 entity dao 和 xml 文件
其中的一种方式 ,使用maven 插件 <build> <plugins> <plugin> <groupId>org.mybatis.generato ...
- 让谷歌浏览器 chrome 支持小于12px的字体
webkit的私有属性:{-webkit-text-size-adjust:none;} 但是,在最新版的谷歌里.已经不在支持这个属性啦. 用css3的transform:scale()缩放大小,但是 ...
- 准备找工作第三天——java基础_由有道云笔记倒入
循环:跳出多重循环:通过设置标号: 1 ok: 2 for(int i=0;i<10;i++) 3 { 4 for(int j=0;j<10;j++) 5 { ...
- iOS中数字的格式化 NSNumberFormatter
NSNumberFormatter 和NSDateFormatter 是NsFormatter的子类. NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值 ...
- 升级adt插件后,eclipse突然出现Unable to build: the file dx.jar was not loaded from the SDK folder 错误
旧版的SDK管理器里面最高只能安装Android 3.2 API,需要更新SDK管理器版本后才能安装Android 4.0.Android 4.1,方法如下: http://blog.csdn.net ...
- ServiceStack.Redis之IRedisClient<第三篇>
事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...
- ASP.NET Core 源码阅读笔记(2) ---Microsoft.Extensions.DependencyInjection生命周期管理
在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题.有关源码可以去GitHub上 ...