Я пытаюсь вычислить расстояние в метрах между двумя точками, используя 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;
Спасибо