После изучения проекции карты я понял, что очень трудно выбрать проекцию, которая позволяет одновременно вычислять расстояния между множеством точек, если эти точки расположены по всему миру. Эквидистантные проекции позволяют только вычислить расстояние между парой точек. Тогда я решил использовать следующее решение. Мой набор данных можно разбить на меньшие наборы данных:
- Территория Соединенных Штатов;
- вся евразия;
- территория, охватывающая африканский континент и Европу.
В ArcGIS 9.3 (лицензия ArcInfo) я проецировал каждый набор данных с проекцией азимутальной равной площади Ламберта, правильно «центрированной» для каждого случая. Для каждого набора данных я загрузил новый слой с шейп-файлом Индикатрисы Tissot и вычислил площади каждого эллипса. Я считал «неискаженными» (в отношении площади и расстояний) все те территории, на которых площади эллипсов не отличаются более чем на 5% от эллипса, ближайшего к центру проекции, и когда форма эллипсов не отличаются разумно от круглого. Увидев, что мои точки были заключены на этой «неискаженной» территории, я вычислил расстояние между точками. Как вы думаете, моя процедура была достаточно правильной или у вас есть какой-нибудь совет относительно лучшей проекции карты для моих целей?
источник
Ответы:
Если вас интересует только вычисление расстояний между двумя точками на поверхности Земли, вам на самом деле не нужно прорабатывать это с помощью карт и картографических проекций.
Вам нужна формула для расчета географических расстояний: http://en.wikipedia.org/wiki/Geographic_distance
Если вам нужна высокая точность, найдите http://en.wikipedia.org/wiki/Geographic_distance#Ellipsoidal-surface_formulae
источник
Зачем пытаться проецировать данные?
Как упоминалось в других ответах, есть математика для расчета расстояний по спериоду (я думаю, что есть и в ArcGIS).
В PostGIS у вас есть два варианта. Используйте тип данных geography, и вы можете использовать все эти функции (глава 8.3). Обратите внимание, что функция ST_Distance работает с типом географии. Другой вариант - использовать тип геометрии и использовать специальную функцию ST_Distance_Sphere или ST_Distance_Spheroid .
/ Никлас
источник
Проверьте формулу Haversine . Если вы немного гуглите, вы можете найти реализации на нескольких языках (Javascript, C #, Python ... и т. Д.).
источник