サイズがsizeX、sizeYのjpegマップがある場合
マップ上のいくつかのキャリブレーションポイント(X、Y、Lon、Lat)
与えられた経度/緯度のペアでマップ内の対応するXYポイントを計算するためのアルゴリズムは何でしょうか?
サイズがsizeX、sizeYのjpegマップがある場合
マップ上のいくつかのキャリブレーションポイント(X、Y、Lon、Lat)
与えられた経度/緯度のペアでマップ内の対応するXYポイントを計算するためのアルゴリズムは何でしょうか?
これが私のために働いたものです、それほど多くのbsなしで。
int x = (int) ((MAP_WIDTH/360.0) * (180 + lon));
int y = (int) ((MAP_HEIGHT/180.0) * (90 - lat));
lat、lon座標は、Androidデバイスから提供されました。したがって、これらはすべてのGoogle Earth/Map製品で使用されているものと同じ標準である必要があります。
正距円筒図法タイプの mapを使用する場合は、次のことを行う必要があります。
これはかなり簡単で単純です..どのようにそれが可能かを説明しましょう.
緯度と経度は、地球上に描かれた架空の線であるため、世界中の任意の場所を正確に特定できます。簡単に言えば、平面の X 座標と Y 座標です。緯度は、北極で 90 度、南極で -90 度の北から南に伸びる垂直線です。
一方、経度は東から南に伸びる水平線で、西が -180 度、東が 180 度です。
HTMLコンテナの幅が世界の幅であり、同じことが高さに当てはまると仮定することで、latLngをピクセル座標に変換できます。
数式 - 経度 - ピクセル
(givenLng*widthOfContainerElement)/360
ここで、360 は度単位の合計経度です。
式 -緯度 - ピクセル
(givenLat*heightOfContainerElement)/180
ここで、180 は度単位の全緯度です。
//Height is calculated from the bottom
この数式の実用的な実装は、私の Web サイト(JavaScript のみを使用)で見つけることができます。
http://www.learntby.me/javascript/latLngconversion.php
まだ説明が必要な場合はお知らせください。
緯度と経度の 2 つのペア間の距離の計算に関する情報は、インターネット上にたくさんあります。私たちは公開ウェブサイトでこれらの計算を使用しており、理解/議論するのは簡単ではありません (したがって、ここでは説明しません)。つまり、実装は簡単です。
距離を返す関数を作成したら、コーナー間の距離に関してマップの幅と高さを計算できるはずです。
次に、左上隅からポイントまでの水平距離と垂直距離を計算できます。
これで、マップの幅のどの比率が左側とポイントの間の距離で表されるかがわかります。その比率をピクセル幅に適用すると、左側とポイントの間のピクセル数が得られます。y 軸について繰り返します。
(左側からのピクセル) = (ピクセル単位の合計幅) * ((左側とポイントの間のジオコード距離) / (左側と右側の間のジオコード距離))
(上からのピクセル) = (ピクセル単位の高さの合計) * ((上とポイントの間のジオコード距離) / (上と下の間のジオコード距離))
編集:これをさらに調査すると、球面上の2点間の距離を概算し、それを平面にマッピングしているため、一部のソリューションが他のソリューションよりも正確な結果を提示することに気付くでしょう。距離が離れると精度が低下します。あなたへの最善のアドバイスは、最初にそれを試してみて、それがあなたのニーズを満たしているかどうかを確認することです.
多くの異なる地図投影スキームがあります。マップで使用されているものを知る必要があります。
地図投影アルゴリズムと順方向/逆方向マッピングの詳細については、このリンクを参照してください。これは、多くの一般的な予測の式を提供します。
<!DOCTYPE html>
<html>
<head>
<style>
#point{font-face:Arial; font-size:18px; color:#FFFF00; width:12px; height:12px;text-shadow: 2px 2px #000000}
#canvas {position: absolute; top: 0px; left: 0px; z-index: -2}
html,
body,
#canvas {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script>
$(window).on("load resize",function(e){
var w = $("#canvas").width();
var h = $("#canvas").height();
// New York, NY (https://maps.googleapis.com/maps/api/geocode/json?address=New%20York,%20NY)
var lat = 40.91525559999999;
var long = -73.70027209999999;
var x = ((w/360) * (180 + long)) - 9;
var y = ((h/180) * (90 - lat)) - 18;
$("#text").text('X:'+x+', Y:'+y);
$("#point").offset({ top: y, left: x });
});
</script>
</head>
<body>
<div id="text"></div>
<div id="point">▼</div>
<img id="canvas" border="0" src="http://friday.westnet.com/~crywalt/dymaxion_2003/earthmap10k.reduced.jpg">
</body>
</html>