6

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

谢谢。

4

3 回答 3

6

现在您可以这样做了,新版本的 jVectorMap (0.2) 引入了带markers参数的此类功能。在这里查看演示http://jvectormap.com/examples/markers-world/

于 2012-05-15T08:36:04.740 回答
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 };
}
于 2012-03-19T07:04:13.827 回答
0

jvector 地图就是这样,一个矢量地图。您需要在 lat/lng 和向量空间之间创建某种类型的对应关系(例如:1px = 1deg)。这将需要自定义地图,或者对其进行一些精确测量以建立比例。更不用说你需要确保你使用的是墨卡托投影,这样平行线甚至意味着你认为它们的意思;)

编辑:如果您对谷歌地图有疑问,我建议您使用像传单这样的替代方法,而不是尝试扩展 jVector 地图来做两件事(绘图点和按比例绘制),这不是它本意要做的。

于 2011-10-30T07:35:31.220 回答