今天在网上看到这篇文章讲解关于坐标定位不准的问题,很有用,存储在这里吧。http://www.cnblogs.com/milkmap/p/3627940.html
原文内容:
一、坐标体系
首先我们要明白,开发者能接触到哪些坐标体系呢?
第一种分类:
1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。GPS坐标形式如图,度分秒形式的经纬度:
2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。
3、 其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。
第二种分类:
首先明白,所有坐标体系的原点,都是非洲。
1、 经纬度。这个是球面坐标,对于北京来说,就是(116.388171,39.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。
如果是度分秒坐标,需要进行转换,才能得到这样的经纬度坐标。详见坐标转换。
2、 墨卡托坐标。平面坐标,相当于是直线距离,数字一般都比较大,像这样的。(215362.00021333335, 99526.00034912192)
墨卡托坐标,主要用于程序的后台计算。直线距离嘛,加加减减几乎计算方便。
搜狗地图API就是直接使用的墨卡托坐标。
二、坐标转换
在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。
比如,你在谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标,他们三家都是通用的,也适用于大部分地图API产品,以及他们的地图产品。
例外,百度API上取到的,是BD-09坐标,只适用于百度地图相关产品。
例外,搜狗API上取到的,是搜狗坐标,只适用于搜狗地图相关产品。
例外,谷歌地球,google earth上取到的,是GPS坐标,而且是度分秒形式的经纬度坐标。在国内不允许使用。必须转换为GCJ-02坐标。
1、度分秒坐标转换为经纬度
比如,在GPS记录仪,或者google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。
2、 GPS转换为GCJ-02坐标
谷歌,高德,腾讯的地图API官网上,都不直接提供这样的坐标转换。如果要得到GCJ-02坐标,最好在他们的地图上直接取点,或者通过地址解析得到。(这个工具我后续会贴出来的。我就爱干这样的事情,哈哈。)
不过,在网上搜到了这样的接口,该接口的type=1就是GPS转到GCJ-02的墨卡托坐标。请大家对接口保密,哈哈。详见:
http://map.sogou.com/api/documentation/javascript/api2.5/interface_translate.html#late_intro
3、GCJ-02与BD-09之间互转
国测局GCJ-02坐标体系(谷歌、高德、腾讯),与百度坐标BD-09体系的转换,在CSDN上有很详细的讲解:
http://blog.csdn.net/coolypf/article/details/8569813
不过也有更简单的算法,线性算法(lat和lng是经纬度,球面坐标):
To_B是转到百度,To_G是转到GCJ-02。
var TO_BLNG = function(lng){return lng+0.0065;};
var TO_BLAT = function(lat){return lat+0.0060;};
var TO_GLNG = function(lng){return lng-0.0065;};
var TO_GLAT = function(lat){return lat-0.0060;};
4、经纬纬度转成墨卡托
网上也有详细讲解:
http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=78245
5、各家API公司坐标转换接口的申请
一般需要将您的公司名称、项目名称、项目简介、联系人和联系方式,发邮件至地图API公司的商务部,经过申请,才能使用。
下面是他们的联系方式:
高德地图 | api@autonavi.com |
百度地图 | mapapi@baidu.com |
腾讯地图 | mapapi@vip.qq.com |
谷歌地图 | 这个,国内没有公交接口,大家应该不会再使用了吧。 |
三、坐标偏移
如果您的坐标在转换之后,还有偏移,那么考虑以下几个方面。
A、原始坐标系弄错,比如以为自己是GPS坐标,但其实已经是GCJ-02坐标。
解决方案:请确保采集到的数据是哪个坐标体系,需要转换到哪个坐标系,再进行坐标转换。
B、原始坐标准确度不够
解决方案:如果您是GPS坐标,请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。
如果本来就是GCJ-02坐标,在不同地图放大级别的时候,看到的地方可能不一样。比如你在地图级别4(国家)取到的坐标,放大到地图12级(街道)时,坐标就偏了。请确保在地图最大放大级别时,拾取坐标。
C、度分秒的概念混淆
比如,在google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。
D、经纬度顺序写反了
有些公司(比如高德,百度,腾讯)是先经度,再纬度,即Point(lng, lat)。但谷歌坐标的顺序恰好相反,是(lat, lng)。
四、坐标拾取工具
既然在国内必须至少使用GCJ-02的坐标系,而GCJ-02,“火星坐标”是在国内最广泛使用的坐标体系。那么,我们就来看看,如何直接获取到GCJ-02坐标呗。
请大家把这段代码保存到记事本里,然后后缀名改为.html,记得用UTF-8编码来保存。然后双击这个文件,就能打开网页了。
注册你自己的key,填在源代码里哦:http://api.amap.com/key/index
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>火星坐标拾取</title> <script language="javascript" src="http://webapi.amap.com/maps?v=1.2&key=您的key"></script> <style> #iMap{height:500px;width:600px;float:left;} .info{float:left;margin:0 0 0 10px;} label{width:80px;float:left;} </style> </head> <body onLoad="mapInit()"> <div id="iMap"></div> <div class="info"> <p><label>火星坐标:</label><span id="lnglat"> </span></p> <p><label>地址:</label><span id="iAddress"> </span></p> </br> <p>说明:</p> <p>1、鼠标滚轮可以缩放地图,拖动地图。</p> <p>2、点击地图,即可获得GCJ-02的经纬度坐标,地址。</p> </div> </body> <script language="javascript"> var mapObj; var lnglatXY; //初始化地图 function mapInit(){ var opt = { level: 13, //设置地图缩放级别 center: new AMap.LngLat(116.397428, 39.90923) //设置地图中心点 } mapObj = new AMap.Map("iMap", opt); AMap.event.addListener(mapObj,'click',getLnglat); //点击事件 } function geocoder() { var MGeocoder; //加载地理编码插件 mapObj.plugin(["AMap.Geocoder"], function() { MGeocoder = new AMap.Geocoder({ radius: 1000, extensions: "all" }); //返回地理编码结果 AMap.event.addListener(MGeocoder, "complete", geocoder_CallBack); //逆地理编码 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(58,30), imageOffset: new AMap.Pixel(-32, -0) }), position: lnglatXY, offset: new AMap.Pixel(-5,-30) }); mapObj.setFitView(); } //回调函数 function geocoder_CallBack(data) { var address; //返回地址描述 address = data.regeocode.formattedAddress; //返回结果拼接输出 document.getElementById("iAddress").innerHTML = address; } //鼠标点击,获取经纬度坐标 function getLnglat(e){ mapObj.clearMap(); var x = e.lnglat.getLng(); var y = e.lnglat.getLat(); document.getElementById("lnglat").innerHTML = x + "," + y; lnglatXY = new AMap.LngLat(x,y); geocoder(); } </script> </html>
打开之后,是这样的:
点击一下地图,即可获得GCJ-02坐标,地址:
demo地址:http://zhaoziang.com/amap/picpoint.html
2014-5-21 更新
高德官方坐标拾取工具:http://api.amap.com/LngLatPicker
相关推荐
通过本项目的学习,开发者不仅可以掌握三边定位算法的基本原理,还能了解到如何在实际项目中应用Java和IBeacon技术进行室内定位。此外,对误差修正、多信号源融合等高级话题的研究,将有助于提升定位系统的精度和...
在在线定位阶段,堆叠自动编码机被用来获取待测点的信号强度特征,并与之前构建的位置指纹数据库中存储的信号强度特征进行匹配。通过近邻算法(最近邻算法),可以估计待测点的位置。近邻算法是一种基于距离度量的方法...
首先,选择程序存储的文件夹,然后创建一个新的模块,并命名。接着,打开程序编辑窗口,开始示教各个点的位置。对于每一步,都需要正确设置指令的联机表格参数,如选择正确的坐标系,设定速度和加速度,以及调整方向...
标题中的“GPS卫星定位-实时位置计算程序-VC++源代码”揭示了这是一个关于使用C++编程语言开发的,能够实现GPS(全球...通过这个项目,学习者可以深入理解GPS定位系统的工作原理,并提升在VC++环境下的实际开发能力。
SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集合,它是预...这份“存储过程学习资料--总结的很全的”压缩包,无疑是深入学习存储过程的好助手,无论你是初学者还是经验丰富的开发者,都能从中受益。
在Android应用开发中,"Android应用源码之android程序的自动更新 和 基于GPS定位的轨迹存储"是一个常见的实战课题,它涉及到移动应用的两个核心功能:自动更新机制和位置服务。这两个功能对于现代应用程序来说至关...
此外,机器学习模型可能储存在这些媒体中,用于优化定位算法或识别环境特征。 在实际应用中,实景导航技术广泛应用于自动驾驶、无人机配送、室内导航、户外探险等多个领域。例如,自动驾驶汽车通过融合多种定位技术...
### FX-PLC定位控制培训手册知识点概览 #### 一、FX-PLC定位控制基础知识 **FX-PLC定位控制**是三菱电机(Mitsubishi ...对于想要深入了解FX-PLC定位控制的工程师和技术人员来说,这本手册是不可或缺的学习资源。
通过这个毕业设计项目,学习者可以深入理解Android的自动更新机制以及如何利用GPS技术记录和存储用户轨迹。同时,这个项目也是一个很好的实践平台,有助于提升开发者在移动应用开发中的实际技能。
"数据结构-C语言-串定位-根据定义求串定位" 本节课程将讲解使用C语言实现串定位算法,通过定义求...通过本节课程,我们学习了使用C语言实现串定位算法,并了解了定义求串定位函数的实现方法和myindex函数的应用场景。
这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。...
"U-Net深度学习模型对DCE-MRI上乳腺肿块自动分割和定位的准确性分析" 这项研究的主要目的是探讨 U-Net 深度学习模型在 DCE-MRI 图像上乳腺肿块自动分割、定位和体积测量的准确性。研究表明,U-Net 模型可以有效地...
通过HCIE-Storage认证的学习,专业人士不仅能掌握高级存储技术,还能提升在企业级数据中心、云计算环境中的存储解决方案设计与实施能力。这不仅有助于个人职业发展,也为企业的数字化转型提供了坚实的技术支撑。
通过这些关键知识点的学习与掌握,我们不仅能够更好地理解通信网络的复杂性,还能为开发更高效、更智能的通信定位解决方案提供坚实的技术支撑。随着技术的不断演进,相信未来会有更多创新的通信定位技术出现,为人们...
5. 融合定位:结合多种定位技术,比如GPS、Wi-Fi、基站和传感器数据,通过机器学习或数据融合算法,提供更准确的位置信息。升级融合定位在于优化各技术间的权重分配、引入新的传感器数据源、提升数据融合算法的复杂...
《电信设备-定位信息的处理方法、装置、存储介质及终端》是一份深入探讨现代通信技术中关于定位信息处理的专题资料。这份资料的核心内容涵盖了定位信息在电信设备中的应用,涉及了处理方法、相关装置的设计、存储...
通过深入理解这些文件,开发者可以学习如何在Web应用中集成GPS定位功能,了解如何使用VS2010进行开发,以及如何优化HTML5 Geolocation API的使用以提高定位精度。同时,这也涉及到跨平台兼容性、用户体验设计和隐私...
该存储库使用多任务级联 CNN 实现基于深度学习的面部检测和面部标志定位。 有关更多详细信息,请参阅 GitHub 存储库: https : //github.com/matlab-deep-learning/mtcnn-face-detection