Я ищу правильную формулу для преобразования набора координат gps в пиксели X/Y для представления точек в заданной области.Масштабирование или увеличение X/Y пикселей, полученных из gps lat/long, чтобы соответствовать определенной области
Конечная цель - взять файл .gpx, например (или любой массив пар лат/длин), проанализировать его и сгенерировать png дорожки/формы.
Я не забочусь о мире и всей математике, которая позволяет получить результат как можно более верный для жизни. Я также не должен сопоставлять позиции с картой. Я просто хочу, чтобы точки X/Y располагались внутри заданной области, выраженной в пикселях.
я эти скрипках:
https://jsfiddle.net/tpwyz2m5/20/
https://jsfiddle.net/bjugo7ff/
Проблема заключается в том, что они являются небольшой, настолько малы, в том, что все они указывают на тот же пиксель в данной области. Вы должны умножить их на огромные числа и поиграть с ними, чтобы они соответствовали области 320x240px.
В некоторых тестах я побежал за мной, чтобы взорвать эти числа, чтобы получить результат, который я хотел, но когда я попробовал его с новым набором координат, у меня получился другой результат, то есть, точки были закрыты или далеко друг от друга.
Что я сделал в своих тестах (просто чтобы посмотреть, работает ли преобразование), чтобы получить точки X/Y с каждого лата/долготы. Пронумеровали их, чтобы получить значения min/max (это были границы формы). Затем я начал умножать и делить числа до тех пор, пока не получим форму в пределах данной области.
так, этот набор координат
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.
Посредством расчета min и max и масштабирования –