7

緯度/経度のペアをピクセル座標に変換しようとしています。このメルカトル図法を見つけましたが、コードがわかりません。factor,x_adj, y_adj 変数とは何ですか? これらの定数なしでコードを実行すると、緯度/経度のペアがマップ上になく、x と y のピクセル座標が必要なものではありません。

function get_xy(lat, lng)
{
var mapWidth=2058;
var mapHeight=1746;
var factor=.404;
var x_adj=-391;
var y_adj=37;
var x = (mapWidth*(180+lng)/360)%mapWidth+(mapWidth/2);
var latRad = lat*Math.PI/180;
var mercN = Math.log(Math.tan((Math.PI/4)+(latRad/2)));
var y = (mapHeight/2)-(mapWidth*mercN/(2*Math.PI));
return { x: x*factor+x_adj,y: y*factor+y_adj}
}

ソース: http://webdesignerwall.com/tutorials/interactive-world-javascript-map/comment-page-1?replytocom=103225

[2]メルカトル図法で緯度/経度をピクセル (x,y) に変換する

4

2 に答える 2

5

それらの変数はどこから来たのですか

これらの変数は、計算された座標をマップの背景画像に一致させるために選択されます。マップの投影パラメータがわかっている場合は、それらを計算できます。しかし、それらは試行錯誤によって得られた可能性がはるかに高いと思います。

メルカトル図法の計算方法

与えられた (横断ではない)メルカトル図法が示す世界のセクションを記述するためのより一般的な方法が必要な場合は、次のコードを使用できます。

// This map would show Germany:
$south = deg2rad(47.2);
$north = deg2rad(55.2);
$west = deg2rad(5.8);
$east = deg2rad(15.2);

// This also controls the aspect ratio of the projection
$width = 1000;
$height = 1500;

// Formula for mercator projection y coordinate:
function mercY($lat) { return log(tan($lat/2 + M_PI/4)); }

// Some constants to relate chosen area to screen coordinates
$ymin = mercY($south);
$ymax = mercY($north);
$xFactor = $width/($east - $west);
$yFactor = $height/($ymax - $ymin);

function mapProject($lat, $lon) { // both in radians, use deg2rad if neccessary
  global $xFactor, $yFactor, $west, $ymax;
  $x = $lon;
  $y = mercY($lat);
  $x = ($x - $west)*$xFactor;
  $y = ($ymax - $y)*$yFactor; // y points south
  return array($x, $y);
}

このコードのデモ実行はhttp://ideone.com/05OhG6で入手できます。

アスペクト比について

を設定すると$xFactor != $yFactor、一種の引き伸ばされたメルカトル図法が生成されます。これはもはや等角 (角度を維持する) ではありません。真のメルカトル図法が必要な場合は、最初の 6 つの変数の割り当て、つまり境界ボックスを定義するもの、または結果のマップのサイズを記述するものを省略し、計算を使用して満足のいくものを選択できます$xFactor == $yFactor。しかし、どれを省略するかの選択は恣意的なものなので、上記のコードは物事を記述する最も対称的な方法だと思います。

于 2013-09-19T16:36:11.577 に答える
-5

見つかった関数から返された変数 X と Y を取得する方法は次のとおりです...

var xy=get_xy(56,34);

var X=xy.x;

var Y=xy.y;

X と Y には座標が含まれています。

于 2016-08-18T10:44:34.763 に答える