Это можно сделать с помощью комбинации Jvectormap, метода конвертера координат Jvectormaps latLngToPoint()
и слоя SVG поверх Jvectormap. Фактически, использование SVG.js в качестве слоя поверх Jvectormap позволяет вам делать практически все, что вы могли бы делать с SVG, заменяя точки координатами широты и долготы.
Вам потребуется загрузить Jvectormap, файл карты Jvectormap, svg.js и плагин svg.path.js (см. https://svgdotjs.github.io) в заголовке страницы. Вам также потребуется создать два блока div в одном, которые могут перекрываться с абсолютными настройками CSS.
<div id="mapContainer" style="position:relative">
<div id="map" style="position:absolute;top:0px;left:0px"></div>
<div id="svgMapOverlay" style="position:absolute;top:0px;left:0px"></div>
</div>
Создайте массив маркеров с широтой и долготой для рисования линий на карте:
var markerArray = [
{name:'Houston', latLng:[29.761993,-95.369568]},
{name:'New York', latLng:[40.710833,-74.002533]},
{name:'Kansas City', latLng:[39.115145,-94.633484]}
];
Затем настройте Jvectormap, используя указанные выше маркеры:
var map = $('#map').vectorMap({
map: 'us_aea_en',
zoomMin: 1,
zoomMax: 1,
markers: markerArray
});
Наконец, вспомните свою карту как объект, создайте свой слой SVG, преобразуйте координаты широты и долготы в точки внутри div:
var map = $('#map').vectorMap('get', 'mapObject');
var draw = SVG('svgMapOverlay').size(660, 400);
var coords1 = map.latLngToPoint(markerArray[0].latLng[0],markerArray[0].latLng[1]);
var coords2 = map.latLngToPoint(markerArray[1].latLng[0],markerArray[1].latLng[1]);
draw.path().attr({ fill: 'none',stroke: '#c00', 'stroke-width': 2 }).M(coords1.x, coords1.y).L(coords2.x, coords2.y);
Большая часть этого JS должна войти в $(function()
вызов или $(document).ready(function()
блок для запуска.
Вы можете увидеть этот JSFiddle для более подробной информации: http://jsfiddle.net/ruzel/V8dyd/
Отказ от ответственности: я не знаю, что происходит с масштабированием; он отключен для этого примера.
person
russellmania
schedule
09.10.2013