1

我使用 Google Maps API v3 创建了一个自定义地图。这是一个虚构世界的矩形地图,而不是现实世界中的任何东西。

我一直在阅读有关如何在自定义 Google 地图中使用投影的文章。我需要使用投影,因为使用投影放置标记和区域,它们不会水平重复。无论如何,我从教程中提取了以下代码:

var tilesize = 256;

function MyProjection(){}

MyProjection.prototype.fromLatLngToPoint = function(latLng)
{
    var x = latLng.lng() * tileSize;
    var y = latLng.lat() * tileSize;
    return new google.maps.Point(x, y);
};

MyProjection.prototype.fromPointToLatLng = function(point)
{
    var lng = point.x * (1.0 / tileSize);
    var lat = point.y * (1.0 / tileSize);
    return new google.maps.LatLng(lat, lng);
};

function LatLngToPixels(latLng)
{
    var pnt = MyProjection.prototype.fromLatLngToPoint(latLng);
    return [pnt.x * 8, pnt.y * 8];
}

function PixelsToLatLng(pxs)
{
    var pnt = {x: pxs[0] / 8, y: pxs[1] / 8};
    return MyProjection.prototype.fromPointToLatLng(pnt);
}

我已经将它应用到我的地图上,它似乎有效。但是,我试图弄清楚如何改变投影的比例。当我放置这样的标记时:

new google.maps.Marker(
{
    map: map,
    position: new google.maps.LatLng(0, 0)
});

标记位于地图的左上角。如果我这样做:

new google.maps.Marker(
{
    map: map,
    position: new google.maps.LatLng(1, 1)
});

标记位于右下角。

所以我基本上有一个最小的经度和纬度为0,最大为1。如何更改上述功能,以便规模更易于管理?比如 0 到 90 或 0 到 180?在现实世界的经度和纬度坐标方面更有意义的东西?或者投影不可能做到这一点?我对预测的想法以及它们的最终目的到底是什么感到有些困惑,所以也许我错过了重点……

4

1 回答 1

5

投影的目的是在 2D 表面(如一张纸或计算机屏幕)上显示 3D 对象(如行星)。

这是一个包含墨卡托投影对象的 Google 示例。请注意,Google Maps API V3 使用世界坐标的概念,整个世界在缩放级别 0 的 256x256 像素的单个图块上表示,然后根据缩放级别放大,因此

pixelCoordinate = worldCoordinate * Math.pow(2,zoomLevel)

于 2012-11-15T06:02:56.000 回答