K_Reverter的网页开发记录

要么不做,要么就当作艺术品来做!

导航

在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    }

posted on 2005-10-10 12:28  K_Reverter  阅读(717)  评论(0)    收藏  举报