SQL Geography Datentyp Entfernung kalkulieren

Stolpere grad über ein Problem mit net und der Spatial Datentypen. Damit kann an Orte definieren und deren Entfernung berechnen. Im Microsoft SQL Server wird der Breitengrad und Längengrad, also Latitude und Longitude gespeichert. Gleiches erhält man bei Nutzung von Bing oder Google Maps als Koordinaten.

image

Nun zwei Varianten der Berechnung der Entfernung per SQL Statement. Hier wird die Distanz zwischen zwei Punkten über eine Kugel gerechnet. Die Funktion STLength liefert die direkte Verbindung und damit einen kleineren Wert.

SQL  Point ( Lat, Long, SRID )

   1:  DECLARE @g geography;
   2:  DECLARE @h geography;
   3:   
   4:  SET @g = geography::Point(48.206501 ,16.378343, 4326);
   5:  SET @h = geography::Point(48.16988, 12.830674, 4326);
   6:  SELECT @h.STDistance(@g);

Ergebnis 263789,75902209

Für Entity Framework oder auch SQLCommand muss man einen String umwandeln um dann per DbGeography.FromText die Koordinaten zu übergeben. Im Kern wird dazu dieses TSQL Statement genutzt.

   1:  DECLARE @g geography;
   2:  DECLARE @h geography;
   3:  SET @g = geography::STGeomFromText('POINT(48.206501 16.378343)', 4326);
   4:  SET @h = geography::STGeomFromText('POINT(48.16988 12.830674)', 4326);
   5:  SELECT @h.STDistance(@g);
Ergebnis 392552,427707221

Das erste Ergebnis ist korrekt und beim zweiten offensichtlich Längengrad an erster Stelle zu nehmen. Die Reihenfolge ist also Längengrad und Breitengrad als vertauscht.

Kommentare sind geschlossen