2016-03-29 21 views
0

Ich versuche, die Funktionen von SQL Server 2014 zu verwenden, um den Abstand zwischen zwei Punkten auf einer geografischen Oberfläche zu bestimmen. Ich habe drei Felder in einer Tabelle (Lat, Long, Coordinates). [Lat] und [Long] werden bestehende Werte und lagere ich die geographischen Punktkoordinaten in dem [Koordinaten] Feld mit den folgende:Räumliche SQL Server-Funktion: .STDistance Gibt es Meilen oder Meter zurück?

UPDATE dbo.[MyTable] 
SET [Coordinates] = geography::STPointFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + CAST([Lat] AS VARCHAR(20)) + ')', 4326) ; 

So, jetzt habe ich einen Tisch voller Datensätze, die die geografischen Koordinaten haben Pre- berechnet im Feld [Koordinaten]. Jetzt möchte ich die Entfernung in Meilen zwischen Point_A und Point_B bestimmen. Früher habe ich die folgenden:

- Compute Point_A:

DECLARE @g geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 68); 

- Compute Point_B:

DECLARE @h geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 1439); 

- Compute Entfernung:

SELECT ROUND(@g.STDistance(@h)) AS [Distance]; 

Der tatsächliche Abstand ist etwa 20 Meilen, aber diese Berechnung gibt mir eine Zahl, die Tausende mal größer als 20 Meilen ist.

Gibt der .STDistance Meter statt Meilen zurück?

Zu einem verwandten Hinweis: Kann mir jemand auf ein Beispiel im Internet verweisen, wo man Tausende von geographischen Punkten in einer Tabelle mit den nächsten geographischen Punkten in einer anderen Tabelle mit tausend Punkten vergleicht? Ich kann sehen, dass diese Berechnung sehr lange dauert, wenn ich keinen Weg finde, den Prozess zu verkürzen.

+1

Mögliche Duplikate von [SQL Server 2008 GEOGRAPHY STDistance() Wert] (http://stackoverflow.com/questions/3335773/sql-server-2008-geography-stdistance-value) – GSerg

+0

Was die Geschwindigkeit angeht, glaube ich Ihnen Ich möchte einen [räumlichen Index] (https://msdn.microsoft.com/en-us/library/bb934196%28v=sql.120%29.aspx) ([möglicherweise gelten Einschränkungen] (https://msdn.microsoft. com/de-us/library/bb895265% 28v = sql.120% 29.aspx # Geographie)). – GSerg

+0

Ich glaube, es ist in Metern – mattias

Antwort

0

Der tatsächlich zurückgegebene Wert hängt von der SRID (Spatial Reference Identifiers) Ihrer Geografie-Spalte ab - Sie legen diese beim Erstellen der Geografieelemente fest. Wenn SRID nicht angegeben wird, wird der Standardwert 4326 angenommen, der dem WGS 84-Datum entspricht.

Soweit Leistung geht können Sie die Geografie-Spalten indizieren, heres einen Link, um Sie auf den richtigen Weg zu bekommen.

https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx

+0

Hat die gestellte Frage nicht beantwortet. Tom C hat es selbst gefunden. – KeyOfJ

0

ich die Standard-SRID-Wert von 4326. wurde mit

Durch Versuch und Irrtum, entdeckte ich, dass es m gegen Meilen zurückkehrt.

Es wäre schön gewesen, wenn Microsoft das in ihrer Dokumentation deutlicher gemacht hätte.

+0

Tom Meter ist der Standard-Rückgabewert bei Verwendung von PostGIS und wir müssen in Meilen umrechnen. Es scheint, dass dies ein Standard in geographischen Systemen ist. – KeyOfJ