Неверное преобразование широты из SA-MP (игровых) координат для карты (в то время как долгота верна) - PullRequest
0 голосов
/ 08 октября 2019

Введение

Я конвертирую игровые координаты в координаты карты , у меня настроены плитки и карта работает.

Я показываю транспортные средства игрока налистовка (та же проблема, что и с mapbox), преобразование координат для оси x правильное (визуально), но неверно ось y (широта).

Что я пробовал

Япытаясь преобразовать игровые координаты в диапазоне от 3000 до -3000 на X и 3000 до -3000 на Y Я считаю, что координаты картыдиапазон от 180 до -180 в X - долгота и 85 до -85 в Y - широта

В настоящее время я использую эту формулу для вычисления ее координат на карте, но я не могу понять, что я делаю здесь неправильно.

Я поставил u динамически, чтобы я мог легко проверить это. .

Обратите внимание, что возвращаемое значение имеет инвертированные x и y, потому что именно так выглядит листовка ...

function getLatLngFromPos(x, y, u = 85) {
    height = 3000; // of the game map
    width = 3000; // of the game map

    return [(y / height) * u, (x / width) * 180];
}

Результаты (~ означает не рассчитано, но угадано):

getLatLngFromPos(1482.47 , -1731.9)

-> [-49.0705, 88.9482] Должно быть: ~ [-71.519235, 88.813477]

getLatLngFromPos(1378.4,-1876.25)

-> [-53.16041666666666,82.70400000000001] Должно быть: ~ [-73.758964, 81.958008]

Если вам нужны плитки, вот код к этому http://145.239.116.170/app-assets/images/maptiles/sanandreas.{z}.{x}.{y}.png

Примечание: MaxZoom равно '4'

Результаты

Неверный результат:

The Иконка автомобиля на карте должна идти стрелка, а также есть дополнительная информация, например, центр карты. (Также это повторяет по оси X, которую я хочу удалить)

ScreenShot: (https://i.ibb.co/HNHgRLC/Shared-Screenshot.jpg)

Гипотеза

Я думаю, что ось Y на этих картах имеет некоторыесвоего рода ускорение к краям ... Это происходит из-за проекции листовки по умолчанию. Также есть реализация этого для Google Maps API по адресу (https://github.com/ikkentim/SanMap/blob/master/js_src/js/SanMap.js) Но Google Maps обманывают, взимая деньги ...

Теперь я предполагаю, что мне придется создать какую-то проекцию, как в реализации SanMap, Как я могу создать свою собственную Проекцию для Mapbox или Leaflet?

...