Как найти широту и долготу с плагином jVector Map - PullRequest
6 голосов
/ 30 октября 2011

Я знаю, что на картах Google есть маркеры для выделения определенных точек на карте.Мне почему-то неудобно размещать карты такого типа на моем сайте, и мне нравятся эффекты карты jvector.Но я не могу понять, как определить маркеры в jVectorMap, кто-нибудь имеет представление о том, как определить маркеры в jVectorMap и выделить эти точки.Я также хотел бы знать, как вы доберетесь до определенной точки в jVector Map, используя широту и долготу.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 15 мая 2012

Теперь вы можете сделать это, новая версия jVectorMap (0.2) представляет такую ​​функцию с параметром markers.Проверьте демо здесь http://jvectormap.com/examples/markers-world/.

3 голосов
/ 19 марта 2012

Карта мира jVectorMap использует проекцию Ван дер Гринтена. Формула для преобразования из / в карту можно найти здесь Википедия и Вольфрам статья.

Вам нужно будет масштабировать его до размера и смещения вашей карты, поскольку в приведенной выше формуле проецируется длинная / широта (от -180 до 180 градусов) на (-1 до +1) декартовой сетки.

Кроме того, углы в формуле должны быть в радианах, а не в градусах.

function vanDerGrinten(lat, lng) {
    lat = lat * Math.PI / 180;
    lng = lng * Math.PI / 180;
    var lng0 = 0;
    var A1 = 0.5 * Math.abs((Math.PI / (lng - lng0) - (lng - lng0) / Math.PI));
    var phi = Math.asin(Math.abs(2 * lat / Math.PI));
    var G = Math.cos(phi) / (Math.sin(phi) + Math.cos(phi) - 1);
    P = G * (2 / Math.sin(phi) - 1);
    Q = A1 * A1 + G;
    x0 = A1 * A1 * (G - P * P) * (G - P * P) - (P * P + A1 * A1) * (G * G - P * P);
    x1 = (A1 * (G - P * P) + Math.sqrt(x0));
    x2 = (P * P + A1 * A1);
    x = sgn(lng - lng0) * Math.PI * x1 / x2;
    y = sgn(lat) * Math.PI * Math.abs(P * Q - A1 * Math.sqrt((A1 * A1 + 1) * (P * P + A1 * A1) - Q * Q)) / (P * P + A1 * A1);
    return { _x: x, _y: y };
}
0 голосов
/ 30 октября 2011

Карта jvector - это просто карта вектора.Вам нужно будет создать некоторый тип соответствия между широтой / шириной и вашим векторным пространством (например: 1px = 1deg).Для этого потребуется либо настроить карту, либо сделать некоторые точные измерения для определения масштаба.Не говоря уже о том, что вам нужно быть уверенным, что вы используете проекцию Меркатора , чтобы параллельные линии даже означали то, что, по вашему мнению, они означают;)

РЕДАКТИРОВАТЬ: Если у вас есть проблемас картами Google я бы порекомендовал использовать альтернативу, такую ​​как leaflet , не пытаясь расширить карту jVector для выполнения двух вещей (построения точек и рисования в масштабе), для которых она не предназначена.

...