|
Plz |
Ort |
Breitengrad |
Längengrad |
|
50189 |
Elsdorf |
50,9333333 |
6,5666667 |
|
50126 |
Bergheim |
50,9666667 |
6,65 |
select fkt_berechne_entfernung(50.9333333, 6.5666667, 50.9666667, 6.65) entfernung from dual;
ENTFERNUNG ---------- 6,92300956 1 row selected
CREATE OR REPLACE function fkt_berechne_entfernung(breit_1 number,
lang_1 number,
breit_2 number,
lang_2 number) return number is
-- ***********************************************************************************************
-- Copyright 19.06.2005 by Gregor Neveling
--
-- NAME berechne_entfernung
--
-- DESCRIPTION: Berechnet die Entfernung zwischen 2 geografischen Punkten
--
-- PARAMETER: Längen und Breitengrad beider Punkte
--
-- return Entfernung in km
--
-- CREATED 19.06.2005
--
-- ***********************************************************************************************
v_entfernung number;
v_breite number;
v_laenge number;
t_breit number;
t_lang number;
begin
t_breit := breit_1 / 180 * 3.1415926;
t_lang := lang_1 / 180 * 3.1415926;
v_breite := breit_2 / 180 * 3.1415926;
v_laenge := lang_2 / 180 * 3.1415926;
v_entfernung := ACOS ( SIN(v_breite) * SIN(t_breit)
+ COS(v_breite) * COS(t_breit)
* COS(t_lang - v_laenge) ) * 6378.388;
return v_entfernung;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(sqlerrm);
return null;
end fkt_berechne_entfernung;
/