1

Google Maps API v3 を使用してカスタム マップを作成しました。これは架空の世界の長方形の地図であり、現実世界のものではありません。

カスタム Google マップで Projections を使用する方法に関する記事を読んでいます。プロジェクションを使用してマーカーとリージョンを配置すると、水平方向に繰り返されないため、プロジェクションを使用する必要があります。とにかく、チュートリアルから次のコードを引き出しました。

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

投影の目的は、3D オブジェクト (惑星など) を 2D サーフェス (紙やコンピューター画面など) に表示することです。

メルカトル図法オブジェクトを含むGoogle の例を次に示します。Google Maps API V3 は、世界全体がズーム レベル 0 で 256x256 ピクセルの 1 つのタイルで表される世界座標の概念を使用し、ズーム レベルに従って拡大されることに注意してください。

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

于 2012-11-15T06:02:56.000 に答える