Как мне получить значения lat long из положения пикселя X, Y на карте Robinson projected, используя JavaScript?

#javascript #maps #latitude-longitude #map-projections

Вопрос:

Я хотел бы преобразовать позиции пикселей X, Y на карте Robinson projected в значения lat longs.

Я нашел функцию JavaScript, которая может преобразовывать длину широты в пиксели — https://github.com/afar/robinson_projection — но я не могу разработать (или найти реализацию) пикселей для lat longs.

Я нашел различные статьи о том, как работает проекция Robinson, например https://simplemaps.com/flash/robinson-projection-in-as3-gpl /

Я в основном застрял на этом этапе — математика, необходимая для вычисления длины широты из пикселя X, Y, выходит далеко за рамки моих ужасных математических способностей — и, несмотря на то, что я читал эти вещи довольно много раз, логика мне тоже не ясна.

Я предположил, что логика находится где-то в исходном коде d3-geo или d3-geo-projection, но ничего не смог найти при поиске по нему.

Глядя на Википедию, есть это:

Координаты точек на карте вычисляются следующим образом: уравнение Робинсона

..но я действительно не понимаю, как поместить это в Javascript или определить «центральный меридиан, выбранный для карты», и даже тогда совпадают ли эти «координаты» со значениями пикселей?

Справочная информация:

Я пытаюсь создать очень легкую, простую функцию javascript, которая может выполнять lat long для пикселей X, Y и наоборот, как для проекций Меркатора, так и для проекций Робинсона — без использования d3 и т.д.. Я хочу, чтобы он был меньше, чем 2 КБ, уменьшенный и сжатый, без ограничений.

У меня Меркатор работает нормально — есть много примеров. Но все еще борется с проекцией Robinson.

Полный код, если это поможет, находится здесь: https://github.com/sc0ttj/component/pull/53

(Примечание, которое может повлиять на решение, которое мне нужно:

По какой-то причине мне пришлось изменить latSign = getSign(lat) latSign = 0-getSign(lat) , чтобы карта показывала правильный путь вверх, по вертикали — см. https://github.com/sc0ttj/component/pull/53/files#diff-dc34d0b1b3b6f92f7c3e71af717cf56a5f98923980b859c128d793991690ebdcR64.)

Я бесстыдно стою на плечах этих двух проектов: