3

この種の質問は何度も聞かれているようですが、投稿された解決策のどれも、私が必要とする答えに近づくことはできません。

ニュージーランドのノースランド地方のこの地図を持っています。この画像の緯度/経度の値をx/y(ピクセル)の値にマッピングしたいと思います(http://i.stack.imgur.com/3ok4O.gif-これは400ピクセル四方)

現在、この画像の正確な緯度/経度の境界はわかりませんが、何をしているのかを知っている人に役立つはずのサンプルデータがいくつかあります。

  LAT              LONG            X                Y
  -35.3989854471   173.504676819   192.92777494     196.760481649
  -35.2647882735   174.121499062   271.426291418    176.82865668
  -35.3131641432   173.89125824    242.099305271    183.945780963

現在受け取っているデータはLat/longのみであるため、アプリケーション内でx値とy値を生成できる必要があります。

誰かがこれらのx/y値を作成するために必要なメソッド/ロジックを書くのを手伝ってくれますか?

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

4

3 に答える 3

4

Javascriptで...

var lat=-35.3989854471;
var long=173.504676819;

var imageNorthLat=???;
var imageSouthLat=???;

var imageWestLong=???;
var imageEastLong=???;

var imageLongPixels=400;
var imageLatPixels=400;

var pixelsPerLat=imageLatPixels/(imageNorthLat-imageSouthLat);
var pixelsPerLong=imageLongPixels/(imageEastLong-imageWestLong);

var xPixelPosition=(long-imageWestLong)*pixelsPerLong;
var yPixelPosition=Math.abs(lat-imageNorthLat)*pixelsPerLat;

私はこれを実行しようとしなかったので、おそらく少しのデバッグが必要であり、xとyのピクセル位置は、左上またはマップのxとyの位置を追加する必要があります。しかし、あなたはその考えを見ることができます。そしてもちろん、私はあなたが本当に何を求めているのか理解していないかもしれません。

于 2011-08-11T06:34:35.170 に答える
0

map.htmlファイルをローカルで作成し、ブラウザで呼び出します。

    <!DOCTYPE html>
<html>
  <head>
    <title>MY MAP</title>
    <meta name="viewport"
        content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta charset="UTF-8">
    <link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css"
        rel="stylesheet" type="text/css">
    <script type="text/javascript"
        src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
      var map;
         var myLatlng1 = new google.maps.LatLng(-35.3989854471, 173.504676819);
var myLatlng2 = new google.maps.LatLng(-35.2647882735, 174.121499062);
var myLatlng3 = new google.maps.LatLng(-35.3131641432, 173.89125824);
      function initialize() {
        var myOptions = {
          zoom: 8,
          center: new google.maps.LatLng(-35.3989854471, 173.504676819),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'),
            myOptions);

                  var marker2 = new google.maps.Marker({
      position: myLatlng2, 
      map: map, 
      title:"POSITION 2"
  });   

                  var marker1 = new google.maps.Marker({
      position: myLatlng1, 
      map: map, 
      title:"POSITION 3"
  });   

                  var marker3 = new google.maps.Marker({
      position: myLatlng3, 
      map: map, 
      title:"POSITION 3"
  });   
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

  </head>
  <body>
    <div id="map_canvas"></div>
  </body>
</html>
于 2011-08-11T04:40:57.503 に答える
0

スケーリング定数は緯度によって異なるため、提案したようにスケーリングするだけで緯度/経度をピクセルに変換することは、地球儀の選択した小さな部分でのみ機能します。

ユニバーサル横メルカトル図法(UTM)座標への変換は、小さな領域で機能する場合があります。まず、表示領域の中心点のUTMゾーンを計算し、次にそのゾーン(ポイントの実際のゾーンではない)を使用して、その画面に表示する必要がある他のすべてのポイントを変換します。

UTM座標は線形であるため、単純なスケーリングでピクセルに変換できます。もちろん、この方法は、単一のUTMゾーン(数百キロメートル)よりもそれほど大きくない領域をレンダリングする場合にのみ有効です。ただし、「ゾーンロック」は、わずかに大きい場合、または単に公式のUTMゾーン境界が表示領域内にある場合にうまく機能します。

座標変換用の優れた、使いやすいオープンソースライブラリがあります。プラットフォームはJavaScriptなので、測地学を見る価値があるかもしれません。座標変換、距離計算、方位、中点などの多くの優れた方法があります。

于 2017-09-11T07:08:16.677 に答える