在Google Maps API中实现container层坐标和地理坐标之间的转化
如果要实现在Google Maps上面附加自己实现的对象,就难免要涉及到坐标转化的问题,要将container层坐标转化为地理坐标比较容易,使用map.containerCoordToLatLng(GPoint p)函数就可以轻松实现,可是,要想将地理坐标转化为container坐标似乎比较困难。
开始的时候我以为通过getDivCoordinate可以实现,在网上,似乎也是这么说,可是我用的时候,总是不准,比如我的750*350的地图中心点,可是通过这个函数得到的中心点坐标总认为是430,206,这个getDivCoordinate更像是Google专门为在地图上安放控件而设置的坐标,针对地图大小还有相应的调整,非常乱。
后来我只能自己写函数解决,下面是我写的函数,初步看来还是比较准确的。
1
function onLoad()
2
{
3
var map = new GMap(document.getElementById("map"));
4
map.addControl(new GSmallMapControl());
5
map.addControl(new GMapTypeControl());
6
GEvent.addListener(map, "moveend", function()
7
{
8
var latLngStr = 'CenterLatLng:(' + map.getCenterLatLng().x + ', ' + map.getCenterLatLng().y + ')<br/>';
9
latLngStr+= 'ZoomLevel:(' + map.getZoomLevel() + ')<br/>';
10
document.getElementById("message").innerHTML = latLngStr;
11
});
12
map.centerAndZoom(new GPoint(106.083984375,36.94989178681327),13);
13
var p=getPointDivPX(106.083984375,36.94989178681327,map);
14
alert(p.x+"*"+p.y);
15
var q=getPointLatLng(300,300,map);
16
alert(q.x+"*"+q.y);
17
}
18
//本函数将经纬转化为像素,m是map
19
function getPointDivPX(x,y,m)
20
{
21
pBC=m.spec.getBitmapCoordinate(y,x,m.getZoomLevel());
22
mBB=m.getBoundsBitmap();
23
return new GPoint((pBC.x-mBB.minX)/(mBB.maxX-mBB.minX)*m.viewSize.width,(pBC.y-mBB.minY)/(mBB.maxY-mBB.minY)*m.viewSize.height);
24
}
25
//本函数将像素转化为经纬,m是map
26
function getPointLatLng(x,y,m)
27
{
28
return m.containerCoordToLatLng(new GPoint(x,y));
29
}
function onLoad()2
{3
var map = new GMap(document.getElementById("map"));4
map.addControl(new GSmallMapControl());5
map.addControl(new GMapTypeControl());6
GEvent.addListener(map, "moveend", function()7
{8
var latLngStr = 'CenterLatLng:(' + map.getCenterLatLng().x + ', ' + map.getCenterLatLng().y + ')<br/>';9
latLngStr+= 'ZoomLevel:(' + map.getZoomLevel() + ')<br/>';10
document.getElementById("message").innerHTML = latLngStr;11
});12
map.centerAndZoom(new GPoint(106.083984375,36.94989178681327),13);13
var p=getPointDivPX(106.083984375,36.94989178681327,map);14
alert(p.x+"*"+p.y);15
var q=getPointLatLng(300,300,map);16
alert(q.x+"*"+q.y);17
}18
//本函数将经纬转化为像素,m是map19
function getPointDivPX(x,y,m)20
{21
pBC=m.spec.getBitmapCoordinate(y,x,m.getZoomLevel());22
mBB=m.getBoundsBitmap();23
return new GPoint((pBC.x-mBB.minX)/(mBB.maxX-mBB.minX)*m.viewSize.width,(pBC.y-mBB.minY)/(mBB.maxY-mBB.minY)*m.viewSize.height);24
}25
//本函数将像素转化为经纬,m是map26
function getPointLatLng(x,y,m)27
{28
return m.containerCoordToLatLng(new GPoint(x,y));29
}posted on 2005-10-10 12:28 K_Reverter 阅读(717) 评论(0) 收藏 举报

浙公网安备 33010602011771号