У меня есть два набора точечных данных в ArcGIS, оба из которых приведены в координатах WGS84 широта / долгота, и точки распределены по всему миру. Я хотел бы найти ближайшую точку в наборе данных A к каждой точке в наборе данных B и получить расстояние между ними в километрах.
Это похоже на идеальное использование инструмента Ближний, но это дает мне результаты в системе координат входных точек: то есть в десятичных градусах. Я знаю, что могу перепроектировать данные, но я понимаю ( из этого вопроса ), что трудно (если не невозможно) найти проекцию, которая даст точные расстояния по всему миру.
Ответы на этот вопрос предлагают использовать формулу Хаверсайна для расчета расстояний, используя координаты широта-долгота напрямую. Есть ли способ сделать это и получить результат в км, используя ArcGIS? Если нет, то как лучше всего подойти к этому?
Это не решение ArcGIS, но использование модели данных Round Earth в пространственной базе данных поможет. Вычислить расстояние от земли в базе данных, поддерживающей это, было бы довольно легко. Я могу предложить вам два чтения:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
источник
Вам нужен расчет расстояния, который работает с широтой / долготой. Vincenty это один я хотел бы использовать ( с точностью до 0,5 мм). Я играл с ним раньше, и это не так уж сложно использовать.
Код немного длинный, но работает. Учитывая две точки в WGS, он вернет расстояние в метрах.
Вы можете использовать его как скрипт Python в ArcGIS или обернуть его вокруг другого скрипта, который просто перебирает два шейп-файла точек и строит для вас матрицу расстояний. Или, возможно, проще представить результаты GENERATE_NEAR_TABLE, найдя 2-3 ближайших объекта (чтобы избежать осложнений искривления Земли).
источник
Я сделал похожий опыт с маленькими наборами данных, используя инструмент Point Distance. При этом вы не можете автоматически найти ближайшие точки в наборе данных A, но, по крайней мере, получите вывод таблицы с полезными результатами в км или m. На следующем шаге вы можете выбрать кратчайшее расстояние до каждой точки набора данных B вне таблицы.
Но этот подход будет зависеть от количества точек в ваших наборах данных. Это может не работать должным образом с большими наборами данных.
источник
Если вам нужны высокоточные и надежные геодезические измерения, используйте GeographicLib , которая изначально написана на нескольких языках программирования, включая C ++, Java, MATLAB, Python и т. Д.
См. CFF Karney (2013) «Алгоритмы для геодезических» для литературной ссылки. Обратите внимание, что эти алгоритмы являются более надежными и точными, чем алгоритм Винсенти, например, рядом с антиподами.
Чтобы вычислить расстояние в метрах между двумя точками, получите
s12
атрибут расстояния из обратного геодезического решения . Например, с пакетом geographiclib для PythonИли сделайте удобную функцию, которая также конвертирует из метров в километры:
Теперь, чтобы найти ближайшую точку между списками
A
иB
, каждый из которых 100 баллов:источник