sql >> Databáze >  >> RDS >> Oracle

Vypočítejte vzdálenost mezi dvěma šířkovými dlouhými body v 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

Výpočet Oracle vrátí 110,611186 km

Ten na vašem webu vrátí 111,19 km tedy rozdíl 580 m . Tento rozdíl spočívá v tom, že vaše online kalkulačka používá jednoduchou matematiku za předpokladu kulového Země, zatímco Oracle používá správný elipsoidní tvar Země (elipsoid WGS84).

Rozdíl můžete vidět na https://www.fai.org/page/world -kalkulačka vzdálenosti Pokud zvolíte WGS84 zemský model (elipsoid WGS84), pak získáte stejný výsledek jako Oracle (110.611186562098). Pokud jej změníte na FAI Sphere pak dostanete 111,19492643325476, stejné jako váš srovnávač.

Správná vzdálenost je 110,611 km. Zda je důležitý výpočet se vzdáleností 580 m, závisí na vaší aplikaci. Pokud měříte krátké vzdálenosti (např. km nebo méně), chyba je zanedbatelná. Ale na dlouhé vzdálenosti to může být významné. Zde by to znamenalo minout cíl o 1/2 km!

Ukazuje důležitost použití správného zemského modelu pro tyto výpočty.

UPRAVIT: A reprezentace Oracle (a téměř všechny nástroje GIS) je zeměpisná délka, zeměpisná šířka . Pokud prohodíte čísla, dostanete velmi odlišné výsledky.



  1. Seřaďte uživatele v mysql podle jejich bodů

  2. Jak spustit úlohu vytvořenou prostřednictvím pgagent v Postgres

  3. Jak vytvořím alias tabulky v MySQL

  4. jak získat nejnovější záznam nebo záznam s maximálním odpovídajícím datem všech různých hodnot ve sloupci v mysql?