如何使用jVector Map插件定位经纬度

6

我知道谷歌地图有标记来突出地图中的某些点。但由于个人原因,我不太想在我的网站上使用这种类型的地图,而喜欢 jVector Map 的效果。但是,我无法弄清楚如何在 jVectorMap 中定义标记,是否有人知道如何在 jVectorMap 中定义标记并突出显示这些点?我还想知道如何使用经度和纬度在 jVector Map 中到达特定点。

谢谢。


你能否编辑标题,问题与Google Maps vs jvectormap无关。这会误导那些正在寻找比较的人。 - Shawn Mclean
3个回答

6

谢谢,您是将标记生成为SVG吗?我们不能添加自定义标记作为可定制的图像吗? - defau1t
很遗憾,当前版本中没有。 - bjornd

3
世界地图的 jVectorMap 使用 van der Grinten 投影。从/转换到地图的公式可以在WikipediaWolfram文章中找到。
您需要将其缩放到地图的大小和偏移量,因为上述公式将经度/纬度(-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
一个jVector地图就是一个矢量地图。你需要创建一些类型的对应关系,将经纬度与你的矢量空间进行对应(例如:1px = 1deg)。这要么需要自定义该地图,要么是进行一些精确的测量以建立比例尺。更不用说你需要确保使用麦卡托投影,以便平行线具有你认为它们具有的含义 ;)
编辑:如果你对谷歌地图有问题,我建议使用leaflet等替代品,而不是试图扩展jVector地图来完成它原本不应该完成的两个任务(绘制点和按比例缩放绘图)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接