Каково правильное решение (и картографическая проекция) для вычисления расстояний между точками, расположенными по всему миру?

11

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

  1. Территория Соединенных Штатов;
  2. вся евразия;
  3. территория, охватывающая африканский континент и Европу.

В ArcGIS 9.3 (лицензия ArcInfo) я проецировал каждый набор данных с проекцией азимутальной равной площади Ламберта, правильно «центрированной» для каждого случая. Для каждого набора данных я загрузил новый слой с шейп-файлом Индикатрисы Tissot и вычислил площади каждого эллипса. Я считал «неискаженными» (в отношении площади и расстояний) все те территории, на которых площади эллипсов не отличаются более чем на 5% от эллипса, ближайшего к центру проекции, и когда форма эллипсов не отличаются разумно от круглого. Увидев, что мои точки были заключены на этой «неискаженной» территории, я вычислил расстояние между точками. Как вы думаете, моя процедура была достаточно правильной или у вас есть какой-нибудь совет относительно лучшей проекции карты для моих целей?

е-сокол
источник
1
Большое спасибо за полезные ответы! Я нашел пакет SDMTools, работающий под «R», чтобы легко вычислять расстояния, используя формулу Винсенти
e-falcon

Ответы:

10

Если вас интересует только вычисление расстояний между двумя точками на поверхности Земли, вам на самом деле не нужно прорабатывать это с помощью карт и картографических проекций.

Вам нужна формула для расчета географических расстояний: http://en.wikipedia.org/wiki/Geographic_distance

Если вам нужна высокая точность, найдите http://en.wikipedia.org/wiki/Geographic_distance#Ellipsoidal-surface_formulae

Игорь Брейц
источник
6

Зачем пытаться проецировать данные?

Как упоминалось в других ответах, есть математика для расчета расстояний по спериоду (я думаю, что есть и в ArcGIS).

В PostGIS у вас есть два варианта. Используйте тип данных geography, и вы можете использовать все эти функции (глава 8.3). Обратите внимание, что функция ST_Distance работает с типом географии. Другой вариант - использовать тип геометрии и использовать специальную функцию ST_Distance_Sphere или ST_Distance_Spheroid .

/ Никлас

Никлас Авен
источник
4

Проверьте формулу Haversine . Если вы немного гуглите, вы можете найти реализации на нескольких языках (Javascript, C #, Python ... и т. Д.).

user890
источник
1
См. Gis.stackexchange.com/q/4906/664 на этом сайте для кода и подробного анализа этой формулы.
whuber