質問

ニューヨーク、ニューヨークの緯度/経度の値を持っています。 40.7560540、-73.9869510と地球の平面画像、1000ピクセル× 446px。

Javascriptを使用して、緯度/経度を、ポイントが位置を反映するX、Y座標に変換できるようにします。

したがって、画像の左上隅を形成するX、Y座標は次のようになります。 289、111

注意事項:

  1. どの投影法を使用するかという問題を心配する必要はありません。独自の投影法を作成してください 仮定またはあなたが知っているものと一緒に行く 動作する可能性があります
  2. X、Yは、画像の任意の角を形成できます
  3. のボーナスポイント PHPで同じソリューション(しかし私は 本当にJSが必要です)
役に立ちましたか?

解決

jsの基本的な変換関数は次のとおりです。

MAP_WIDTH = 1000;
MAP_HEIGHT = 446;

function convert(lat, lon){
    var y = ((-1 * lat) + 90) * (MAP_HEIGHT / 180);
    var x = (lon + 180) * (MAP_WIDTH / 360);
    return {x:x,y:y};
}

これは、左上のピクセル数を返します。 この関数は以下を前提としています:

  1. 画像が適切に配置されていること 左上隅(0,0) 90 * Northと180 *で整列 西。
  2. Nが-、Sが+、Wが-、Eが+でコードが署名されていること

他のヒント

使用する投影法はすべてを変更しますが、これはメルカトル図法を想定して機能します:

<html>
<head>
<script language="Javascript">
var dot_size = 3;
var longitude_shift = 55;   // number of pixels your map's prime meridian is off-center.
var x_pos = 54;
var y_pos = 19;
var map_width = 430;
var map_height = 332;
var half_dot = Math.floor(dot_size / 2);
function draw_point(x, y) {
    dot = '<div style="position:absolute;width:' + dot_size + 'px;height:' + dot_size + 'px;top:' + y + 'px;left:' + x + 'px;background:#00ff00"></div>';
    document.body.innerHTML += dot;
}
function plot_point(lat, lng) {
    // Mercator projection

    // longitude: just scale and shift
    x = (map_width * (180 + lng) / 360) % map_width + longitude_shift;

    // latitude: using the Mercator projection
    lat = lat * Math.PI / 180;  // convert from degrees to radians
    y = Math.log(Math.tan((lat/2) + (Math.PI/4)));  // do the Mercator projection (w/ equator of 2pi units)
    y = (map_height / 2) - (map_width * y / (2 * Math.PI)) + y_pos;   // fit it to our map

    x -= x_pos;
    y -= y_pos;

    draw_point(x - half_dot, y - half_dot);
}
</script>
</head>
<body onload="plot_point(40.756, -73.986)">
    <!-- image found at http://www.math.ubc.ca/~israel/m103/mercator.png -->
    <img src="mercator.png" style="position:absolute;top:0px;left:0px">
</body>
</html>

優れたJavascriptライブラリ、 PROJ4JS があり、異なるプロジェクション間で変換を行うことができます。

地球全体の写真がある場合、投影は常に重要です。しかし、あなたの質問を理解していないだけかもしれません。

メルカトル図で機能する関数を作成しました。特に、画像が全世界をカバーしていない場合、トリミングされたマップでも機能することを意味します: https://stackoverflow.com/a/ 10401734/730823

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top