2015-04-24 4 views
1

Я хочу извлечь значение расстояния для нескольких точек из таблицы значений, имеющих широту, долготу и расстояние. У меня есть таблица, которая следует по линии пути вдоль пути и имеет точки каждые ~ 20 метров с километровыми точками, из которых я хочу извлечь значение расстояния.excel matching lat и long points

Таблица поиска

Lookup table: points and distances along the train path

У меня есть еще одна таблица, таблица перекрестных ссылок, то есть позиционные данные поезда каждые 3-5 минут по тому же пути, что и таблица перекодировки, так что лат и длинные точки не будет таким же. Мне нужно выполнить поиск в таблице поиска, чтобы найти ближайший лат и длинную точку на пути и извлечь соответствующее расстояние. Я могу найти ближайшую точку для широты и долготы в отдельности, но поскольку путь ветрен, ожидаемые значения не совпадают. Я прошел через некоторые из точек, которые отличаются от ожидаемых, а в некоторых случаях расстояние, связанное с широтой, является правильным, а в других - расстояние, связанное с долготой, является правильным.

Справочная таблица

Reference table: Search the lookup table for the closest point to each point in this table

Выделенные значения в справочной таблице являются значениями, которые не согласны с тем, что они должны быть, как показано в таблице поиска (тот же цвет, относится к значению, найденного в таблица поиска). Жирные значения - это точки, которые были согласованы, и это то, чего я надеюсь достичь во всех точках. Точки километра в справочной таблице верны, но мне пришлось вручную настроить уравнения для использования правильного значения.

Это уравнение, которое я использую для извлечения расстояния. (Колонка J)

=IF(MATCH(MIN(ABS(LookupTable-ReferenceLatitude)),ABS(LookupTable-ReferenceLatitude),0)=MATCH(MIN(ABS(LookupTable-ReferenceLongitude)),ABS(LookupTable-ReferenceLongitude),0), TRUE:extract Distance, FALSE: ??? [both points should agree]) 

В настоящее время я вручную регулировать FALSE условие, чтобы извлечь расстояние от лат или длинного значения по мере необходимости.

Вопрос в том, есть ли способ обеспечить как широту, так и долготу, чтобы получить правильное расстояние? и что следует использовать в случае FALSE для расчета?

ответ

1

Я нашел решение, довольно сложное на самом деле. Сначала рассуждения, правильные точки можно найти, найдя минимальное расстояние между вашими опорными точками и точками поиска. Минимальное расстояние между двумя точками даст вам желаемый лат, лог и соответствующее расстояние.

Я нашел уравнение spherical law of cosines (наименее сложное), которое позволяет рассчитать расстояние между двумя точками. Затем вы можете использовать MATCH(), чтобы найти строку своей точки, а затем INDEX(), чтобы извлечь значение расстояния.

Вот MATCH() уравнение

=MATCH(MIN(ABS(2*ATAN2(SQRT(1-(SIN(RADIANS((refLat-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2)))),SQRT(SIN(RADIANS((refLat-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2))))*6371)),ABS(2*ATAN2(SQRT(1-(SIN(RADIANS((refLat2-lookupLatArray)/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong2-lookupLonArray)/2))*SIN(RADIANS((refLong-lookupLonArray)/2)))),SQRT(SIN(RADIANS((refLat-lookupLatArray/2))*SIN(RADIANS((refLat-lookupLatArray)/2))+COS(RADIANS(refLat))*COS(RADIANS(lookupLatArray))*SIN(RADIANS((refLong-lookupLonArray/2))*SIN(RADIANS((refLong-lookupLonArray)/2))))*6371),0) 
Смежные вопросы