我知道谷歌地图有标记来突出地图中的某些点。出于某种原因,我不愿意将这种类型的地图放在我的网站上,并且喜欢 jvector 地图效果。但我无法弄清楚如何在 jVectorMap 中定义标记,是否有人知道如何在 jVectorMap 中定义标记并突出显示这些点。我也很想知道您如何使用纬度和经度到达 jVector Map 中的某个点。
谢谢。
我知道谷歌地图有标记来突出地图中的某些点。出于某种原因,我不愿意将这种类型的地图放在我的网站上,并且喜欢 jvector 地图效果。但我无法弄清楚如何在 jVectorMap 中定义标记,是否有人知道如何在 jVectorMap 中定义标记并突出显示这些点。我也很想知道您如何使用纬度和经度到达 jVector Map 中的某个点。
谢谢。
现在您可以这样做了,新版本的 jVectorMap (0.2) 引入了带markers
参数的此类功能。在这里查看演示http://jvectormap.com/examples/markers-world/。
jVectorMap 世界地图使用van der Grinten 投影。可以在此 Wikipedia和Wolfram文章中找到从/到地图的转换公式。
您需要将其缩放到地图的大小和偏移量,因为上述公式将经度/纬度(-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 };
}