我正在尝试验证是否可以使用 jvectormap 在地图上的标记之间绘制线条。
这是我想要实现的目标:http: //i.imgur.com/p1Zypv3.gif
有人可以给我一个提示,如果这是可行的,如果可以的话怎么办?
欣赏任何输入。
我正在尝试验证是否可以使用 jvectormap 在地图上的标记之间绘制线条。
这是我想要实现的目标:http: //i.imgur.com/p1Zypv3.gif
有人可以给我一个提示,如果这是可行的,如果可以的话怎么办?
欣赏任何输入。
这可以通过 Jvectormap、Jvectormaps 坐标转换器方法latLngToPoint()
和 Jvectormap 顶部的 SVG 层的组合来完成。事实上,利用 SVG.js 作为 Jvectormap 之上的一个层,您几乎可以做任何可以用 SVG 做的事情,同时用经纬度坐标替换点。
您需要在页面标题中加载 Jvectormap、Jvectormap 地图文件、svg.js 和 svg.path.js 插件(请参阅https://svgdotjs.github.io)。您还需要在一个中创建两个可以与 CSS 绝对设置重叠的 div。
<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/
免责声明:我不知道缩放会发生什么;在这个例子中它被关闭了。
最后,我尝试实现将 Lines 添加到 JVectorMap 的功能。SVG 的解决方案很好,但不适用于 Zoom、Move 和 Panzoom。所以我直接在 JVectorMap 中添加了指定 Lines 的选项,类似于 Regions 和 marker。您可以查看 Pull Request 的状态https://github.com/bjornd/jvectormap/pull/431,其中包含所有内容。现在您可以使用
var lines = [
{points: [[50.0755,14.4378], [55.7558,37.6173]], text:"Prague - Moscow];
尽管如此,拉取请求需要包含在新版本的 jvectormap 中,希望作者尽快完成 :) 工作代码在我的个人博客中:https ://sevenhillsaway.com/map/
所以我一直在尝试@russellmania 的答案。它只适用于 SVG 版本,它包含在 jsfiddle 链接中。如果我用实际版本的 SVG 尝试相同的代码,它会在 SVG 上崩溃,说“this.clear(...).attr”函数未定义。但是,对我来说,我希望 JVector 缩放和地图移动功能仍然有效。但是在地图上使用 SVG 图层时,它不起作用。或者可以说,有 2 个选项:1)禁用移动和缩放(我不想要这个)2)启用缩放、移动,但是 SWG 层不会像 JVector 那样缩放和移动,因此路径与地图不同步:)
我找到了一种使用标记在 JVector 中画线的方法。但这不是正确的方法。所以我还在浏览 jvectormap 文档,如果有什么方法可以直接在 jvectormap 中画线。
var markerIndex=1;
var markerCoords=[];
latLng={72,62};
markersCoords[markerIndex] = latLng;
map.addMarker(markerIndex, {latLng: [latLng.lat, latLng.lng]});
markerIndex += 1;