6

Googleマップには、地図上の特定のポイントを強調するマーカーがあることがわかります。私は何らかの理由で、このタイプの地図を私のサイトに入れて快適に感じることができず、jvectorマップの効果が大好きです。しかし、私はjVectorMapでマーカーを定義する方法を理解することはできませんが、誰でもjVectorMapでマーカーを定義し、それらのポイントをハイライトする方法の手がかりを持っています。私は緯度と経度を使ってjVector Mapの特定の点にどのように到達するのかを知りたいと思っています。jVector Map Pluginで緯度と経度を検索する方法

ありがとうございました。

+0

タイトルを編集できますか?質問はgoogle maps 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を使用していることを確認する必要はありません)

EDIT:Googleマップに問題がある場合は、 leafletのように、jVectorマップを拡張して、それが意図していなかった2つの点(プロット点、および縮尺に描画)を実行しようとしません。

3

jVectorMapの世界地図はvan der Grinten投影を使用しています。マップを変換する数式は、 WikipediaWolframという記事で確認できます。

上記の式が-1/-1から+1のデカルトグリッドに長い/緯度(-180〜180度)を投影している場合は、地図のサイズを&オフセットにスケーリングする必要があります。

また、数式の角度は度ではなく、ラジアンである必要があります。

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 }; 
} 
関連する問題