Картографическая проекция Масштаб от пикселя до широты?

Я создал пользовательскую карту с помощью API Карт Google 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? Что-то, что имеет немного больше смысла с точки зрения реальных долготы и широты координат? Или это невозможно с проекциями? Меня немного смущает идея проекций и какова их конечная цель, поэтому, возможно, я упускаю суть...

1 ответ

Решение

Цель проекции - показать трехмерный объект (например, планету) на двухмерной поверхности (например, на листе бумаги или на экране компьютера).

Вот пример Google, который содержит объект проекции Меркатора. Обратите внимание, что в Google Maps API V3 используется концепция мировых координат, при которой весь мир представлен на одной плитке размером 256x256 пикселей с уровнем масштабирования 0, а затем масштабируется в соответствии с уровнем масштабирования, так что

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

Другие вопросы по тегам