但google的中国部分地图有政策性偏差.下面是我纠证的方法,首先将google地图嵌到自己的网站上的方法网络上很多,这里就不介绍了.
方法是通过Getdata.asp读取接口http://www.anttna.com/goffset/goffset.php?lat=xxx&lon=xxx获得的修正经纬度数据 lat原纬度,lon是原经度, 再利用Ajax动态调用getdata.asp读到的地图修正数据给htm显示.
下面是htm java 纠正的部分程序.可参考http://maps.esitak.com/
showLocation()
{
var lat = getElementById(“txtLatitude”).value;//这里是文本框传递参数
var lng = getElementById(“txtLongitude”).value;//这里是文本框传递参数
var point = new GLatLng(lat,lng);//原经纬度点
//通过接口http://www.anttna.com/goffset/goffset.php?lat=xxx&lon=xxx获得的修正经纬度数据
zoom=null;
offset_x=null;
offset_y=null;
var oXmlHttp =createXMLHTTP();//利用Ajax动态调用误差数据网页.
var url=”http://www.anttna.com/goffset/goffset.php?lat=” + lat + ”&lon=” + lng
var my_url=”../getdata.asp?url=”+escape(url);
oXmlHttp.open(“POST”,my_url,false);//获得getdata.asp 读取的误差数据
oXmlHttp.send(null);
var getdata = oXmlHttp.responseText;
var data = getdata.split(“,”); //获取经度,纬度修正数据..还有地图的缩放度
if(data.length == 3)
{
zoom=+data[0];
offset_x=+data[1];
offset_y=+data[2];
//getElementById(“txtLatitude”).value =offset_x;
//getElementById(“txtLongitude”).value =offset_y;
}
else
return;
//修正经纬度
map.clearOverlays();
map.setCenter(new GLatLng(lat,lng),14);
point= convertCoord(point,zoom,offset_x,offset_y);
map.addOverlay(new GMarker(point));
//lastMarker=point;
}
getdata.asp部份程序:
<%
url=request.querystring(“url”) //接htm传过来的网址
TransferHtmlPage(url)
TransferHtmlPage(url)
On Error Resume Next
dim oXmlHttp
dim r
set oXmlHttp=Server.createobject(“Microsoft.XMLHTTP”)
oXmlHttp.open ”POST”,url, false
oXmlHttp.send()
r = oXmlHttp.responseText
Response.Write(r)
End
%>
- Google Earth中显示的坐标位置和GPS导航仪显示数值是一致的(可接受的误差内),而且是正确的,至少小数点后3位是相同的。
- maps.google.com的“卫星”模式中对某位置获取的坐标与Google Earth获取的几乎是一样的。
- Google Maps的卫星模式与Google Earth的图片是一样的。
- 面向我国的Google地图(ditu.google.cn)中显示我国境内的、来自GPS设备或者GE的坐标位置是有偏差(向西偏离实际位置约200-600米不等),国外位置没有此类问题;上述问题在更换到maps.google.com消失,位置标注是准确的。
- ditu.google.cn中“地图”和“卫星”模式一致的,有偏差都有偏差,尽管与实际坐标并不一致;maps.google.com里却是不一致,不过“卫星”模式下是正确,“地图”模式下却有明显偏移。
- 上述偏差发生在我国境内位置,国外位置无论是在何种语言下标注都是正确的。
- 最新测试ditu.google.cn表明,假如不考虑GE和GPS的实际坐标位置,单纯就考虑自身,其“地图”和“卫星”等模式已经完全自身匹配,获取的“坐标”重新定位也是自我匹配的,但拿这个得到的坐标放在GE上就向东偏移。因此,目前ditu.google.cn提供的坐标是“经过修正”的伪坐标,这是与GE和GPS设备比对的结果。上述偏差发生在我国境内位置,国外位置无论是在何种语言下标注都是正确的。因此,这个问题似乎是政策性不是技术性的,截至目前依然存在(2009年5月26日)。
Google公司的庞大服务器集群基于DNS负载或其他技术满足用户有效访问需要,其中面向我国的地图服务由ditu.google.cn提供,其服务器位于北京,其全球Maps由maps.google.com负责。Google类似我国区域服务一样,也提供比如日本、韩国、印度等区域国家服务。某些全球数据比如卫星图像是同步更新的,但地图却不一定,区域国家的地图更新比全球服务更新要快。比如我国城市新建的交通状况,ditu.google.cn数据比maps.google.com新。
由上面测试来看,使用ditu.google.cn服务,”自我封闭”状态下是完美的,“地图”和“卫星”模式是自洽的。但是当把这个状态下的“坐标”用在GE或GPS上,位置就偏离了,反之也是一样的。假如使用maps.google.com,本身不是自洽的,尽管“卫星”等模式下是可以正确标注坐标的,但“地图”模式不买账。上述情况就目前来看仅限于我国。
序号 | 地点 | GE/GPS坐标 | GM地图坐标 | 偏差 | 谷歌地图 Google Maps |
1 | 国家天文台 | 40.002886° 116.377959° | 40.004451° 116.38563° | 672米75° | ditu.google.cn maps.google.com |
2 | 上海天文台 | 31.190398° 121.429197° | 31.188528° 121.433832° | 484米115° | ditu.google.cn maps.google.com |
3 | 紫金山天文台 | 32.061714° 118.774836° | 32.0594° 118.780457° | 589米116° | ditu.google.cn maps.google.com |
4 | 云南天文台 | 25.027231° 102.795816° | 25.02427° 102.797259° | 365米157° | ditu.google.cn maps.google.com |
5 | 长春人卫站 | 43.790531° 125.443531° | 43.7931° 125.449877° | 580米61° | ditu.google.cn maps.google.com |
6 | 乌鲁木齐天文站 | 43.864436° 87.569080° | 43.865692° 87.572° | 271米60° | ditu.google.cn maps.google.com |
上述表中所展示的偏差已经远大于GPS未取消SA的100米误差级别。我们可称之为中国SA。