Как указано в Документация Google Maps :
Поскольку базовая плитка Mercator Google Maps имеет размер 256 x 256 пикселей.
Также обратите внимание, что на каждом уровне масштабирования карта имеет 2 n плиток.
Это означает, что на zoomLevel 2 пиксели в любом направлении карты равны = 256 * 2² = 1024px.
Принимая во внимание, что периметр Земли составляет ~ 40000 км, с увеличением 0, каждый пиксель ~ = 40000 км / 256 = 156,25 км
При увеличении 9 пиксели составляют 131072: 1 пиксель = 40000 км / 131072 = 0,305 км ... и так далее.
Если мы хотим, чтобы 400 пикселей = 1 км, мы должны выбрать максимально возможное приближение, поэтому: 1 пиксель = 1 км / 400 = 0,0025 км
Я попробовал увеличить масштаб = 15 и получить 1px = 0,00478 и увеличить = 16, что дало мне 1px = 0,00238 км
Это означает, что вы должны использовать zoom = 16, и у вас будет 0,955 км каждые 400 пикселей в линии экватора и только для x координат .
По мере того, как вы идете на север или юг по широте, периметр с каждым разом уменьшается, что приводит к изменению расстояния. И, конечно, это также меняет корреляцию по оси y , так как проекция сферы сложна.
Если вы хотите рассчитать с помощью функции точное расстояние, вы должны использовать тот, который предоставлен Google на их документации :
// Describe the Gall-Peters projection used by these tiles.
gallPetersMapType.projection = {
fromLatLngToPoint: function(latLng) {
var latRadians = latLng.lat() * Math.PI / 180;
return new google.maps.Point(
GALL_PETERS_RANGE_X * (0.5 + latLng.lng() / 360),
GALL_PETERS_RANGE_Y * (0.5 - 0.5 * Math.sin(latRadians)));
},
fromPointToLatLng: function(point, noWrap) {
var x = point.x / GALL_PETERS_RANGE_X;
var y = Math.max(0, Math.min(1, point.y / GALL_PETERS_RANGE_Y));
return new google.maps.LatLng(
Math.asin(1 - 2 * y) * 180 / Math.PI,
-180 + 360 * x,
noWrap);
}
};