web-dev-qa-db-ja.com

キャリブレーションポイントを含むマップで経度と緯度をX Yに変換する

サイズがsizeX、sizeYのjpegマップがある場合

マップ上のいくつかのキャリブレーションポイント(X、Y、Lon、Lat)

与えられた経度/緯度のペアでマップ内の対応するXYポイントを計算するためのアルゴリズムは何でしょうか?

25
Jorge

これは、それほど多くのbsなしで私のために働いたものです。

int x =  (int) ((MAP_WIDTH/360.0) * (180 + lon));
int y =  (int) ((MAP_HEIGHT/180.0) * (90 - lat));

緯度と経度の座標は、Android=デバイスによって提供されたものです。したがって、すべてのGoogle Earth/Map製品で使用されているものと同じ標準である必要があります。

19
Gubatron

Equidistant Cylindrical Projection type map を使用する場合、次のことを行う必要があります。

  1. ここであなたの場所のチュートリアルの緯度と経度を見つけます:
    http://lifehacker.com/267361/how-to-find-latitude-and-longitude
  2. その情報を次の式に入力します。
    x =(ピクセル単位の画像の合計幅)*(180 +緯度)/ 360
    y =(画像の全高(ピクセル))*(90-経度)/ 180

    注:緯度の負の経度を使用するときは、負の数、つまり+(-92)または -35)を必ず加算または減算してください。これは実際には-92および+35

  3. これで、画像にプロットするXとYができました

    この式とマップタイプの詳細については、以下をご覧ください。
    ---(http://www.progonos.com/furuti/MapProj/Dither/CartHow/HowER_W12/howER_W12.html#DeductionEquirectangular
11
Anthony Master

緯度と経度の2つのペアの間の距離の計算については、インターネット上に多くの情報があります。私たちは公開ウェブサイトでこれらの計算を使用しており、それらを理解/議論することは簡単ではありません(したがって、ここではそれらを取り上げようとはしません)。とはいえ、実装は簡単です。

距離を返す関数を作成したら、コーナー間の距離に関してマップの幅と高さを計算できるはずです。

次に、左上隅からのポイントの水平距離と垂直距離を計算できます。

これで、マップの幅の比率が左側とポイント間の距離で表されていることがわかり、その比率をピクセル幅に適用すると、左側とポイント間のピクセル数がわかります。 y軸についても繰り返します。

(左側からのピクセル)=(ピクセル単位の合計幅)*((左側とあなたのポイント間のジオコード距離)/(左側と右側間のジオコード距離))

(上からのピクセル数)=(ピクセル単位の高さの合計)*((上端からポイントまでのジオコード距離)/(上端から下端までのジオコード距離))

編集:これをさらに調査すると、球面上の2点間の距離を概算し、平面上にそれをマッピングしているため、一部の解決策は他の解決策よりも正確な結果を示すことに注意してください。距離が長くなると、精度が低下します。あなたへの最良のアドバイスは、最初にそれを試してみて、それがあなたのニーズを満たしているかどうかを確認することです。

8
Mayo

これはかなり単純明快で簡単です。それがどのように可能かを説明しましょう。

緯度と経度は、地球上の任意の場所を正確に特定できるように、地球上に描かれた架空の線です。簡単に言えば、それらは平面のX座標とY座標です。緯度は、北極から南極へと伸びる垂直線で、北極で90度、南極で-90度です。

一方、経度は東から南に伸びる水平線で、西は-180度、東は180度です。

htmlコンテナの幅が世界の幅であり、高さにも同じことが当てはまると想定することで、latLngをピクセル座標に変換できます。

式-経度-ピクセル

(givenLng*widthOfContainerElement)/360

ここで、360は経度の合計(度)です

式-Latitude-pixel

(givenLat*heightOfContainerElement)/180

ここで、180は緯度の合計です

//Height is calculated from the bottom

あなたはこの式の実用的な実装をここに見つけることができます、私のウェブサイト(それはJavaScriptのみを使用しています)

http://www.learntby.me/javascript/latLngconversion.php

それでも説明が必要な場合はお知らせください。

7
Krishna sagar

多くの異なるマップ投影スキームがあります。マップで使用されているものを知る必要があります。

マップ投影アルゴリズムとフォワード/リバースマッピングの詳細については、 このリンク を確認してください。これは、多くの一般的な予測の式を提供します。

5
Eric J.

これを作るだけです(メルカトル図法マップの場合):

extension UIView
{
    func addLocation(coordinate: CLLocationCoordinate2D)
    {
        // max MKMapPoint values
        let maxY = Double(267995781)
        let maxX = Double(268435456)

        let mapPoint = MKMapPointForCoordinate(coordinate)

        let normalizatePointX = CGFloat(mapPoint.x / maxX)
        let normalizatePointY = CGFloat(mapPoint.y / maxY)

        let pointView = UIView(frame: CGRectMake(0, 0, 5, 5))
        pointView.center = CGPointMake(normalizatePointX * frame.width, normalizatePointY * frame.height)

        pointView.backgroundColor = UIColor.blueColor()

        addSubview(pointView)
    }
}

UIViewに座標を追加するための私の単純なプロジェクト: https://github.com/Glechik/MapCoordinateDrawer

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>
1
Omer