Questo può essere fatto con una combinazione di Jvectormap, metodo convertitore coordinate Jvectormaps latLngToPoint()
e un livello SVG sopra Jvectormap. In effetti, l'utilizzo di SVG.js come layer su Jvectormap ti consente di fare praticamente qualsiasi cosa che potresti fare con SVG mentre sostituisci i punti con le coordinate di latitudine-longitudine.
Avrai bisogno di caricare Jvectormap, il file di mappa Jvectormap, svg.js e il plugin svg.path.js (vedi https://svgdotjs.github.io) nell'intestazione della pagina. Dovrai anche creare due div in uno che possa sovrapporsi alle impostazioni assolute 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>
Creare una serie di marcatori con latitudine e longitudine per disegnare le linee da e sulla mappa:
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]}
];
quindi impostare il vostro Jvectormap utilizzando i marcatori sopra:
var map = $('#map').vectorMap({
map: 'us_aea_en',
zoomMin: 1,
zoomMax: 1,
markers: markerArray
});
Infine, richiama la tua mappa come un oggetto, crea il tuo livello SVG, converti le coordinate lat-long in punti all'interno del 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);
La maggior parte di questo JS deve andare in una chiamata $(function()
o $(document).ready(function()
per l'avvio.
Si può vedere questo JSFiddle per maggiori dettagli: http://jsfiddle.net/ruzel/V8dyd/
Disclaimer: Non so cosa succede con lo zoom; è spento per questo esempio.