как перевести координаты из сферических в декартовы на плоскую карту кратко

Практика




как перевести координаты из сферических в декартовы на плоскую карту
как плолучить координаты точки на карте мира

Земля круглая, а мониторы плоские. Для того, чтобы можно было смотреть землю на мониторе — существуют методы проецирования земного шара на плоскость.
Один из таких методов — проекция Герарда Меркатора, заключается в том что земной шар вытягивают в районе полюсов в цилиндр, а затем получившийся цилиндр разрезают по 180 меридиану в результате чего получается плоское изображение.

Так как в районе полюсов карта получается очень растянутая, то небольшие куски сверху и снизу карты обрезаются (оставляют диапазон широт примерно от -85° до 85°). В итоге получается такая карта:

как перевести координаты из сферических в декартовы на плоскую карту

На википедии можно скачать карту проекции Меркатора в высоком разрешении на которой мы и будем рисовать.

Теперь как отобразить точку с заданной координатой на этой карте?
Долгота в проекции Меркатора не искажается. Значит для того, чтобы узнать точку X на карте нам всего лишь нужно умножить долготу на масштаб карты по X и прибавить получившееся число к точке обозначающей середину карты.

С широтой сложнее. Масштаб увеличивается от экватора к полюсам. Чем дальше от экватора — тем выше искажение.
Увеличивается масштаб по такой формуле:

как перевести координаты из сферических в декартовы на плоскую карту

Здесь φ — это широта (в радианах), y — коэффициент искажения.
Зная это — умножаем широту на масштаб по Y и на коэффициент искажения.

Вкратце отличия от проекции меркатора:

Проекция не искажается по широте, соотв. широта считается так же как и долгота.
Есть несколько преимуществ в использовании этой проекции: во первых немного увеличивается диапазон широт, во вторых несколько быстрее просчитываются точки, т.к. математические операции — примитивные.
Впрочем есть один незначительный минус — карта немного «сжата» по вертикали.






if(@$_POST['map_x'])

{
$width = 222;
$height = 111;
$values = getlocationcoords_inv($_POST['map_x'],$_POST['map_y'], $width,$height);
}



function getlocationcoords_inv($x,$y, $width,$height)
{
$lat = ((($y / $height) * 180) - 90) * -1;
$lon =(($x / $width) * 360) - 180;
return array($lat,$lon);

}

?>


Longitude:

Latitude:




?>



если нужно наоборот из сферических в декартовых на javascript


var MAP_WIDTH = 500;
var MAP_HEIGHT = 200;

function ra_de(value) {
var pi = Math.PI;
var ra_de = value*(180/pi);
return ra_de;
}



function de_ra(value) {
var pi = Math.PI;
var de_ra = $value*(pi/180);
return de_ra;
}




func tion conv ert($latitude, $longitude){


/* для Меркатора
var x = (MAP_WIDTH / 2 + ($longitude * 85 / 15));
var y = (MAP_HEIGHT / 2 - ra_de( Math.log(Math.tan((Math.PI / 4) + de_ra($latitude) / 2))) * 85 / 15);
*/

/* для equirectangular*/
var x =-MAP_WIDTH * (-$longitude -180) / 360-13;
var y = MAP_HEIGHT *( 90-$latitude) / 180-38;

return {x:(x),y:(y)};
}
создано: 2014-05-19
обновлено: 2021-03-13
530



Рейтиг 10 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)