Это дополнительный вопрос к моему предыдущему: Можете ли вы предложить несколько хорошо написанных вводных текстов о проекциях системы координат?
Давайте предположим, что я работаю с картографической проекцией CH1903, которая, насколько я знаю, является конформной, но не эквидистантной. Смысл, углы (форма) были сохранены, но не области, расстояния или масштаб. (По крайней мере , они не были сохранены в точности ). Все идет нормально.
Мне интересно, какие вычисления выполняет ArcGIS, когда я хочу вычислить расстояние между двумя точками. В ArcObjects я мог бы использовать IProximityOperator
интерфейс следующим образом:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Вопрос: Когда я работаю с системой отсчета, которая не точно сохраняет расстояния, что будет делать ArcGIS, когда я запросю у нее расстояние между двумя точками (как показано выше)?
Делает ли он просто некоторые пифагорейские вычисления (a 2 + b 2 = c 2 ), чтобы получить расстояние, а это означает, что возвращаемое расстояние будет настолько точным, насколько позволяет проекция?
Или он сделает что-то более сложное, например, некоторую форму повторного проецирования, чтобы получить более точное расстояние?
( Тот же вопрос, но в более общем плане: после того, как эти геометрии спроецированы, выполняет ли ArcGIS все вычисления просто в евклидовом пространстве или же проекция используемой карты все еще влияет на вычисления расстояний, углов, площадей и т. Д.?)
Ответы:
Если вам нужен стабильный метод вычисления геодезических расстояний, я рекомендую оболочку Ричи Кармайкла для ESRI Projection Engine .
Обновление: я только что попробовал код Ричи с ArcGIS 10.0 на Vista64 и получил исключение после вызова
LoadLibrary
. Я рассмотрю это позже.На данный момент, хотя, некоторые код в ответ на вопросы в комментариях к другому ответу.
Код сравнивает IProximityOperator для точек с пространственными привязками и без них. Затем он показывает, как использовать азимутальную равноудаленную проекцию (с первой точкой, являющейся точкой касания), чтобы найти расстояние большого круга.
Вот вывод:
Я думаю, что было бы интересно проверить это на dll движка проекции (pe.dll). Будет публиковать результаты, если я когда-нибудь получу код Ричи на работу.
Обновление: как только я изменил код Richies для компиляции для x86, я запустил его. Интересно ... большое расстояние по кругу, которое он мне дал, составляет 1960273,80162999 - значительное отличие от того, которое было получено из азимутального равноудаленного метода, описанного выше.
источник
В ArcGIS 10 обратите внимание на IGeometryServer2, который теперь имеет GetDistanceGeodesic (геодезическое расстояние между двумя геометриями), GetLengthsGeodesic (возвращает геодезическую длину каждой полилинии) и DensifyGeodesic (уплотняет полилинию путем построения точек вдоль геодезических линий, соединяющих вершины 4: : GeodesicDensify) методы.
Как упоминалось в других ответах, ArcGIS по-прежнему использует в основном плоские вычисления.
Мелита Кеннеди
Некоторые комментарии к другим ответам (пока недостаточно комментариев для непосредственного комментирования!).
Азимутальная эквидистантная проекция Эсри поддерживает эллипсоиды. Код GreatCircleDist создает PCS, который использует GCS на основе эллипсоида / сфероида, поэтому расстояния от центра / исходной точки будут геодезическими, а не большими расстояниями по окружности. Это также может быть упрощено. Нам известны проекционные координаты первой точки, потому что это центр проекции: 0,0. Таким образом, только 2-й пункт должен быть спроецирован. Затем можно использовать упрощенную функцию EuclidianDistance.
Я проверил результаты по геодезическим функциям pe.dll, и они совпали. Похоже, что приложение Ричи использует сферу, поэтому оно возвращает большие расстояния / координаты окружности в своем тестовом приложении. Вот почему результаты не совпадают. Я не узнал значения радиуса; Я думаю, что мне нужно поговорить с ним об этом!
источник
Точность любого ответа о ArcGIS может быть изменена в любое время - насколько нам известно, новые процедуры будут включены в следующий пакет обновления без предупреждения или документации. При этом в программном обеспечении ESRI долгое время использовались евклидовы вычисления ( например , формула Пифагора для расстояний) всякий раз, когда используются проекционные координаты. Часто в расчетах, подобных тем, что вы иллюстрируете, программное обеспечение даже не имеет доступа к информации о проекции, так что еще можно сделать?
Ваш вопрос сам по себе предполагает, что расчеты евклидова расстояния для эквидистантной проекции верны. Нет ничего более далекого от правды. Для одноточечной эквидистантной проекции евклидово расстояние до базовой точки гарантированно равно геодезическому расстоянию; для двухточечной равноудаленной проекции евклидово расстояние до любой базовой точки гарантированно равно геодезическому расстоянию. В обмен на эти гарантии метрическое искажение между всеми остальными парами точек обычно значительно увеличивается по сравнению с другими проекциями, которые можно выбрать.
источник