一、坐标体系首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类:1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。GPS坐标形式如图,度分秒形式的经纬度: GPS经纬度.jpg 2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。 3、 其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。 第二种分类:首先明白,所有坐标体系的原点,都是非洲。 坐标系原点-非洲.jpg 1、 经纬度。这个是球面坐标:这个是球面坐标,对于北京来说,就是(116.38817139.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。 2、 墨卡托坐标。这个是平面坐标:平面坐标,相当于是直线距离,数字一般都比较大,像这样的。(215362.00021333335 99526.00034912192) 二、坐标转换在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。 1、度分秒坐标转换为经纬度 2、 GPS转换为GCJ-02坐标 不过,在网上搜到了这样的接口,该接口的type=1就是GPS转到GCJ-02的墨卡托坐标。请大家对接口保密,哈哈。详见: 3、GCJ-02与BD-09之间互转 不过也有更简单的算法,线性算法(lat和lng是经纬度,球面坐标): 4、经纬纬度转成墨卡托 三、坐标偏移如果您的坐标在转换之后,还有偏移,那么考虑以下几个方面。 四、坐标拾取工具 <!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=6260f3e133c146a76f7c210c2786aec9"></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(5830) 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(xy); geocoder();} </script> </html> 补充:关于iOS定位: |
|