gpsコーディネートのセットをX/Yピクセルに変換して特定の領域のドットを表す正しい式を探しています。特定の領域にフィットするgps lat/longから得られた拡大/縮小X/Yピクセル
究極の目標は、.gpxファイル(または緯度/経度のペアの任意の配列)をとり、解析してトラック/シェイプのpngを生成することです。
私は、結果を世界にできるだけ正確に伝えるために必要なすべての数学と世の中を気にしません。また、そのポジションをマップに合わせる必要もありません。私はちょうどX/Y点がピクセルで表された与えられた領域の内側に収まるようにしたい。
私はこれらのフィドルを持っている:
https://jsfiddle.net/tpwyz2m5/20/
https://jsfiddle.net/bjugo7ff/
問題は、与えられたエリア内の同じピクセルに、彼らはすべてのポイントという事実に、彼らは小さなにあるほど小さいです。あなたはそれらを320x240ピクセルの領域に収めるために、それらに巨大な数を掛けなければなりません。
いくつかのテストでは、私はそれらの数字を爆破して私が望んだ結果を得ることができましたが、新しい座標で試してみると、私は別の結果を得ました。遠く離れている。
私のテストでは(ちょうど変換の動作を確認するために)、各緯度/経度からX/Y点を取得することでした。それらをループして最小値/最大値(形状の境界線)を得ました。次に、与えられた領域の内側に形状がフィットするまで、私は数を掛けて除算を開始しました。
ので、座標
var coords = {
0: {
lat: '45.88289847',
lon: '21.52251720'
},
1: {
lat: '45.88570661',
lon: '21.52431965'
},
2: {
lat: '45.88376483',
lon: '21.52770996'
}
};
のセットとこの
var coords = {
0: {
lat: '45.23621754',
lon: '20.49499512'
},
1: {
lat: '46.46813299',
lon: '21.67053223'
},
2: {
lat: '45.59097825',
lon: '22.74169922'
}
};
は、非常に類似の結果を有していなければならない(わずかフィドルのように)。
ここで私がテストで使用全体のjavascriptです:
var coords = {
0: {
lat: '45.88289847',
lon: '21.52251720'
},
1: {
lat: '45.88570661',
lon: '21.52431965'
},
2: {
lat: '45.88376483',
lon: '21.52770996'
}
};
var w = document.getElementById('box').clientWidth; // 320px
var h = document.getElementById('box').clientHeight; // 240px
for (var key in coords) {
var lat = coords[key]['lat'];
var lon = coords[key]['lon'];
var x = (lon * w)/360;
var y = (lat * h)/180;
var div = document.getElementById('box');
var dot = document.createElement("div");
dot.className = 'dot';
dot.style.top = y+'px';
dot.style.left = x+'px';
div.appendChild(dot);
console.log(key + ' -> lat:' + lat + '; lon:' + lon + '; x: ' + x + '; y: ' + y);
}
HTML:
<div id="box"></div>
はCSS:
#box {
width:320px;
height:240px;
border:1px solid #F00;
position:relative;
}
.dot {
width:2px;
height:2px;
background-color:#00F;
position:absolute;
}
ので、質問は私はスケールやズームインないか、ありますX内のドットをYピクセルの長方形に合わせる。
最小および最大を計算し、それに応じてスケーリングすることによって –