distance calculation

procedure to calculate a dístance in oracle sql

DECLARE
    earthSphereRadiusKilometers DECIMAL(10,6);


    lat1Degrees decimal(15,12);
    lon1Degrees decimal(15,12);
    lat2Degrees decimal(15,12);
    lon2Degrees decimal(15,12);


    lat1Radians decimal(15,12);
    lon1Radians decimal(15,12);
    lat2Radians decimal(15,12);
    lon2Radians decimal(15,12);


    distance decimal(10,6);    
    
BEGIN


    earthSphereRadiusKilometers := 6366.707019;


    /*wien: 48.214608,16.364136 linz: 48.305121,14.293213*/


    lat1Degrees := 48.214608;
    lon1Degrees := 16.364136;
    lat2Degrees := 48.305121;
    lon2Degrees := 14.293213;


    lat1Radians := (lat1Degrees / 180) * ACOS(-1.0);
    lon1Radians := (lon1Degrees / 180) * ACOS(-1.0);
    lat2Radians := (lat2Degrees / 180) * ACOS(-1.0);
    lon2Radians := (lon2Degrees / 180) * ACOS(-1.0);


    — formula for distance from [lat1,lon1] to [lat2,lon2]
    distance := ROUND(2 * ASIN(SQRT(POWER(SIN((lat1Radians – lat2Radians) / 2) ,2)
        + COS(lat1Radians) * COS(lat2Radians) * POWER(SIN((lon1Radians – lon2Radians) / 2), 2)))
        * earthSphereRadiusKilometers, 4);


    DBMS_OUTPUT.PUT_LINE(‚distance: ‚ || distance);


END;


result is

distance: 153,5289

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s