6

我知道Google地圖有標記可突出顯示地圖中的某些點。我出於某種原因不習慣將這種類型的地圖放在我的網站上,並熱愛jvector地圖效果。但我無法弄清楚如何在jVectorMap中定義標記,是否有人知道如何在jVectorMap中定義標記並突出顯示這些點。我也很想知道如何使用經度和緯度到達jVector Map中的某個點。如何使用jVector地圖插件查找緯度和經度

謝謝。

+0

你可以編輯標題,這個問題與谷歌地圖vs jvectormap無關。這會誤導人們尋找比較。 –

回答

5

現在你可以做到這一點,jVectorMap的新版本(0.2)引入了這樣的功能,以markers參數。在這裏查看演示http://jvectormap.com/examples/markers-world/

+0

謝謝,你是否生成標記作爲SVG,我們不能添加我們自己的標記作爲可定製的圖像。 – defau1t

+0

不幸的是目前的版本。 – bjornd

0

jvector地圖就是這樣一個矢量地圖。你需要在lat/lng和你的向量空間之間創建一些類型的對應關係(例如:1px = 1deg)。這要麼需要定製地圖,要麼對其進行一些精確的測量來確定比例尺。更何況,你需要確保你使用的是mercator projection,這樣平行線甚至意味着你認爲他們的意思;)

編輯:如果你有谷歌地圖的問題,我會建議使用替代像leaflet,不是試圖擴展jVector地圖來做兩件事情(繪圖點,並按比例繪製),它並不打算做。

3

jVectorMap世界地圖使用van der Grinten投影。可以找到這個地圖轉換公式的公式。這篇文章可以找到這個 WikipediaWolfram的文章。

由於上述公式將long/lat(-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 }; 
}