Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oblicz odległość między dwoma punktami łat long w Oracle

select sdo_geom.sdo_distance(
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 10.0, null), null, null),
  sdo_geometry(2001, 4326, sdo_point_type(40.0, 11.0, null), null, null),
  0.01,
  'unit=KM'
) as distance
from dual;

DISTANCE
----------
110.611186

Obliczenia Oracle zwracają 110.611186 km

Ten w Twojej witrynie zwraca 111,19 km więc różnica 580 m . Ta różnica polega na tym, że Twój kalkulator online wykorzystuje prostą matematykę, zakładając kulę ziemia, podczas gdy Oracle używa właściwej elipsoidalnej kształt ziemi (elipsoida WGS84).

Możesz zobaczyć różnicę na https://www.fai.org/page/world -kalkulator odległości Jeśli wybierzesz WGS84 model Ziemi (elipsoida WGS84), uzyskasz taki sam wynik jak Oracle (110.611186562098). Jeśli zmienisz go na FAI Sphere wtedy otrzymujesz 111.19492643325476, taki sam jak twój komparator.

Prawidłowa odległość to 110,611 km. To, czy obliczanie z wyłączonym 580 m jest ważne, zależy od aplikacji. Jeśli mierzysz krótkie odległości (np. kilometr lub mniej), błąd jest znikomy. Ale na długich dystansach może to mieć znaczenie. Tutaj oznaczałoby to przeoczenie celu o 1/2 km!

Pokazuje, jak ważne jest użycie prawidłowego modelu Ziemi do tych obliczeń.

EDYTUJ: A reprezentacja Oracle (i prawie wszystkie narzędzia GIS) to długość i szerokość geograficzna . Jeśli zamienisz liczby, otrzymasz bardzo różne wyniki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć informacje o typach danych w schemacie Oracle?

  2. Próbuję zrozumieć over() i partycjonowanie przez

  3. Porównywanie wierszy w tej samej tabeli w Oracle

  4. Oracle JDBC DriverManager.getConnection() zawiesza się

  5. Jak dodać atrybut do xml zawartego w CLOB w bazie danych Oracle?