Преобразование координат широты / долготы в пиксели на заданной карте (с помощью JavaScript) - PullRequest
3 голосов
/ 17 января 2012

Я собрал базу данных городов из MaxMind, и она включает значения широты / долготы для каждого города в базе данных.Я также составил карту Северной Америки и хотел бы, чтобы на координатах x / y карты отображался значок, полученный из координат широты / долготы записи городской базы данных.

Из моего понимания мне нужно сначала найти левые / верхние границы карты (lat / lng -> x / y), а затем использовать это как разницу для линейных отношений между любым из координат x / y в североамериканском городе.Наконец, в зависимости от размера карты, это всего лишь несколько простых операций деления и вычитания, чтобы выяснить, где разместить точку.

Однако я не могу понять, как сделать следующее:

  1. Я не уверен, что такое система отображения lat / lng.Как мне это выяснить?
  2. Используя библиотеку JavaScript, как мне преобразовать широту / долготу в пиксели для координат 0,0 и каждой из координат города.Я пробовал Proj4js, но они требуют, чтобы вы указали типы вашей карты координат и так далее.Вот еще один вопрос, который задал нечто подобное. Конвертировать long / lat в пиксель x / y на заданной картинке

Есть идеи?

- РЕДАКТИРОВАТЬ -

ВыводКарта (Северной Америки) представляет собой сплошной цилиндр: «Цилиндрическая проекция Миллера».http://en.wikipedia.org/wiki/Miller_cylindrical_projection

Ответы [ 2 ]

5 голосов
/ 02 августа 2012

Широта и Долгота - это воображаемые линии, нарисованные на земле, чтобы вы могли точно определить любое место в мире. Проще говоря, это координаты X и Y плоскости. Широта - это вертикальная линия, проходящая с севера на юг с 90 градусами у северного полюса и -90 градусами у южного полюса.

Долгота с другой стороны - это горизонтальная линия, идущая с востока на юг с -180 градусами на западе и 180 градусами на востоке.

Вы можете преобразовать latLng в пиксельные координаты, предположив, что ширина html-контейнера равна ширине мира, и то же самое относится и к высоте.

Формула - Долгота - пиксель

(givenLng*widthOfContainerElement)/360

где 360 - общая долгота в градусах

Формула -Широта - в пикселях

(givenLat*heightOfContainerElement)/180

, где 360 - общая долгота в градусах

//Height is calculated from the bottom

дайте мне знать, если вам все еще нужны какие-либо разъяснения.

1 голос
/ 06 августа 2018

Вот реализация Javascript проекции Меркатора , которая возвращает только положительные значения (декартова система координат экранов) и учитывает сферу> плоское преобразование:

// get x   
var x = (lng + 180) * (mapWidth / 360);
// convert from degrees to radians
var latRad = lat * Math.PI / 180;
// get y value
var mercN = Math.log(Math.tan((Math.PI / 4) + (latRad / 2)));
var y = (mapHeight / 2) - (mapWidth * mercN / (2 * Math.PI));
...