Izračunavanje udaljenosti između dve tačke

Objavljeno: 27-12-2013 | Autor: Miloš Milenković | Kategorija: T-SQL

2

Ukoliko imamo koordinate dve tačke na mapi, veoma lako možemo izračunati udaljenost između njih uz pomoć GEOGRAPHY tipa podatka i funkcija Point i STDistance. Za primer uzećemo Trg Republike u Beogradu kao start i Adu Ciganliju kao cilj.

DECLARE @StartGeoSirina DECIMAL(6,2), @StartGeoDuzina DECIMAL(6,2), @CiljGeoSirina DECIMAL(6,2), @CiljGeoDuzina DECIMAL(6,2);

--start (Trg Republike) 
SET @StartGeoSirina = 20.46;
SET @StartGeoDuzina = 44.82;

--cilj (Ada Ciganlija) 
SET @CiljGeoSirina = 20.42;
SET @CiljGeoDuzina = 44.79;

Zatim od parova koordinata formiramo dve tačke tipa GEOGRAPHY koristeći funkciju Point:

DECLARE @Start GEOGRAPHY, @Cilj GEOGRAPHY;

SET @Start = GEOGRAPHY::Point(@StartGeoSirina, @StartGeoDuzina, 4326);
SET @Cilj = GEOGRAPHY::Point(@CiljGeoSirina,@CiljGeoDuzina, 4326);

Funkcija Point zahteva 3 parametra. Prva dva su očigledno geografska širina i dužina, dok je treći parametar SRID (Spatial Reference System Identifier) koji predstavlja oznaku koordinatnog sistema koji se koristi. 4326 označava WGS (World Geodetic System), standard koji je svima dobro poznat i koji se koristi za GPS.

Sada kad imamo dve tačke možemo izračunati i udaljenost između njih. Na prvu tačku primenjujemo funkciju STDistance, a kao parametar prosleđujemo drugu tačku.

SELECT @Start.STDistance(@Cilj) as UdaljenostUMetrima;

Kao rezultat prethodnog upita dobijamo da je udaljenost od Trga Republike do Ade 5423 metara.

Komentari (2)

kako izračunati udaljenost od Novog Sada (ulica Mihajla Pupina 100 do Beograda (ulica Strumička 88) ali da idemo kolima. Znači najkraći put.

Dragi Srđane, hvala što čitate naš blog. Na žalost, odgovor na Vaše pitanje nije moguće dati samo uz pomoć SQL-a. Da bi se dobila udaljenost koja nije dužina prave linije između dve tačke neophodno je koristiti neki servis, a najpoznatiji je Google Maps API i neki programski jezik (najlakše je pokušati sa nekim od scripting jezika kao što su Java Script, Python, PHP i sl.). Pošto ovaj blog nije fokusiran na takvu vrstu programiranja, najviše što možemo da uradimo je da Vas usmerimo. Ukoliko kopirate sledeći URL u Vaš browser: http://bit.ly/1Riih2H dobićete JSON rezultat koji je sadrži udaljenost u kilometrima i vreme potrebno da se pređe udaljenost između dve tačke koje su navedene kao „origin“ i „destination“. Ovaj URL se može dinamički kreirati u nekom od pomenutih programskih jezika i poslati Goggle Maps API-ju kao zahtev, a kao rezultat ćete dobiti opisani JSON. U istom programskom jeziku se zatim može parsirati JSON response i iz njega dobiti udaljenost vreme i upisati u bazu. Ovo je uobičajen proces i na internetu se mođe naći dosta primera kako ovo implementirati (npr. http://analystcave.com/excel-calculate-distances-between-addresses gde se koristi Excel i VBA=.