Картографическая проекция Масштаб от пикселя до широты?
Я создал пользовательскую карту с помощью 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)