В настоящее время я занимаюсь разработкой картографического сайта OpenLayers. Измерения могут быть выполнены с использованием линейного инструмента и инструмента площади. Оба они в настоящее время настроены для расчета геодезических измерений, как описано в API OpenLayers .
Я использую геодезические измерения, а не плоские измерения, так как во время пользовательского тестирования люди подвергали сомнению измерения инструмента для расстояний, которые они уже знали (например, вождение между городами).
Новая функция сайта для пользователя, чтобы иметь возможность нарисовать круг на карте с заданным радиусом. OpenLayers позволяет рисовать только круги с использованием плоских расстояний, поэтому, когда пользователь измеряет круг с помощью инструмента геодезических измерений, значения не совпадают. На изображении ниже круговой плоский радиус составляет 10 км, но измерение геодезической линии для диаметра составляет 12 км.
Ясно, что это оставит пользователя (и меня) интересующимся, что является правильным.
Глядя на этот ответ, кажется, что большинство настольных ГИС-систем «игнорируют» эту проблему и возвращают плоские измерения и расстояния. Итак, какова наилучшая практика с точки зрения пользовательского интерфейса и точности для обработки плоских и геодезических измерений?
Обновить
Я нашел этот пример Google, который иллюстрирует проблему радиусов и проекции Меркатора:
http://maps.forum.nu/gm_sensitive_circle2.html
Код JavaScript для рисования круга выглядит следующим образом:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
Учитывает ли этот круг искривление земли?
Окончательное обновление
Рабочий код размещен по адресу http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
источник
Ответы:
Если вы завариваете дома в браузере, вы можете получить «круг» (он не будет круглым на экране из-за вашей проекции; скорее аппроксимируется многоугольником с таким количеством точек, сколько вы хотите нарисовать), используйте прямая форма геодезических расчетов: заданная точка, направление (азимут) и расстояние, которое она дает вам полученную точку. Детали Гори: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
Похоже, кто-то уже сделал перевод на javascript: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html . Повезло тебе!
Чтобы закончить вещи:
Ура!
источник
Чтобы получить геодезический круг, вы можете использовать буферную операцию в сервисе геометрии ESRI.
Свободно доступный доступен здесь .
источник