Приветствую.
Подскажите, как высчитать длину и высоту эллипса в точке (lat, lon) для отображения радиуса.
Как в этом видео https://www.youtube.com/watch?v=9ciN9I6IdqY
Приветствую.
Подскажите, как высчитать длину и высоту эллипса в точке (lat, lon) для отображения радиуса.
Как в этом видео https://www.youtube.com/watch?v=9ciN9I6IdqY
На Меркаторе масштаб меняется с изменением широты, поэтому упрощенный способ нарисовать окружность это взять масштаб в одной центральной точке и отмасштабировать радиус.
scale = scale_at_equator * cos(lat)
Например если на экваторе окружность имеет диаметр 10 пикселов, на широте Москвы уже 18.3 пикселов.
Для того чтобы рисовать картинки на предельных широтах этого мало, надо
chnav, спасибо!
Второй вариант тоже хорош.
Но пока интересует упрощенный вариант.
Вот здесь в примере http://obeattie.github.io/gmaps-radius/?radiusInput=100&unitSelector=km&lat=46.45507&lng=-269.388049&z=2&u=km&r=1000
От широты зависит и ширина и высота, но в большей степени высота эллипса. Как такого достигнуть?
Т.е. чем дальше широта от полюса, тем радиус больше, но и еще и тем больше высота, чем широта.
Без просмотра по ссылке возможно сложно понять)
Кликаешь по карте - ставится радиус 1000км
Это только на глазок эллипс, на самом деле сложная фигура в форме “яйца” (эллипс с острым концом в сторону экватора и тупым концом в сторону полюса), а при постановке точки ближе к полюсу вырождается в волнистую линию с одной стороны и бесконечность с другой.
Это можно нарисовать только пересчетом отдельных точек.
chnav, спасибо!
А как отложить вектор длиной 1000 км?
Если переводить точку EPSG:4326 в EPSG:3857, и потом откладывать вектор, то длина 1000 будет не равна 1000км.
Как отложить вектор в километрах в координатах системы EPSG:4326?
Вот так получаю точки отложенные по углу на длину
double dx = distance*Math.Cos(Math.PI/180.0*angle);
double dy = distance*Math.Sin(Math.PI/180.0*angle);
double radiusWorld = 6378137;
double new_lat = lat + (180/Math.PI)*(dy/radiusWorld);
double new_lon = lon + (180/Math.PI)*(dx/radiusWorld)/Math.Cos(Math.PI/180.0*lat);
Но в итоге почему-то в любом месте круг получается как круг.
А нет, всё четко. Надо было увеличить радиус, чтоб увидеть эффект
NovaEiz
Гуглите фразу “ПГЗ (Прямая Геодезическая Задача) на эллипсоиде”, иначе у полюсов вы получите значения широты >90°