Получить расстояние между двумя точками на основе двух столбцов одной таблицы Oracle OCL - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь вычислить расстояние в метрах между двумя точками, используя long и lat каждой точки.Все данные находятся в таблице в следующем формате:

Таблица1

Place_Nm  Land_name LONG_pl     LONG_ln     LAT_pl      LAT_ln    
Place1    Land031   61.43305    71.43611    35.25326    85.3654
Place2    Land032   91.44204    21.43611    95.32857    85.3054
Place3    Land033   61.49735    71.43611    35.67956    95.3654
Place4    Land034   11.50326    81.43611    15.35913    65.6054

Я хочу добавить еще один столбец, который будет расстоянием между значением столбца place_nm и столбца land_name

Я пытался использовать приведенный ниже код, но я получаю сообщения об ошибках

SELECT a.*, sdo_geom.sdo_distance(sdo_geom.sdo_geometry(2001, 8307, sdo_geom.sdo_point_type(long_pl, lat_pl, NULL), NULL, NULL),
                           sdo_geom.sdo_geometry(2001, 8307, sdo_point_type(long_ln, lat_ln, NULL), NULL, NULL), 0.0001, 'unit=M') distance_in_m
                           from table1 a; 

Полученное сообщение об ошибке:

ORA-13032: недопустимый объект NULL SDO_GEOMETRY
ORA-06512: в "MDSYS.SDO_3GL", строка 2089
ORA-06512: в "MDSYS.SDO_GEOM", строка 2096

Я также пытался использовать приведенный ниже запрос, но, похоже, он возвращает результаты, которые, кажется,быть очень низким для расстояния в метрах или слишком высоким для расстояния в км.

SELECT ((ACOS(SIN(lat_pl * 3.141592653 / 180) * SIN(lat_ln * 3.141592653 / 180) + 
COS(lat_pl * 3.141592653 / 180) * COS(lat_ln * 3.141592653 / 180) * COS((long_pl - long_ln) * 3.141592653 / 180)) * 180 / 3.141592653) 
* 60 * 1.8531) AS distance  
FROM table1;  

Спасибо

...