Kurze Antwort:
Make @orig_lat
und @orig_lng
vom Typ decimal(19,6)
(zum Beispiel) oder float
.
Lange Antwort:
Das Problem ist, weil Ihr decimals
keine tatsächlichen Dezimalstellen haben (Sie können die Standardgenauigkeit verwenden, die decimal(18,0)
ist), so dass sie am Ende 53 sein und -2. Sie sollten ihre Genauigkeit definieren (z. B. decimal(19,6)
) oder einfach float
verwenden, was der Typ ist, den die Funktion sowieso erwartet. Wenn Sie einfach nur das ändern, es funktioniert gut:
DECLARE @orig_lat float
DECLARE @orig_lng float
SET @orig_lat=52.676 set @orig_lng=-1.6193
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
DECLARE @dest geography = geography::Point(55.0853, -1.595, 4326);
select @orig.STDistance(@dest)
Das gibt 268166.415685712
.
ich dies durch einfaches Drucken den varchar
Äquivalent der geography
entdeckt:
DECLARE @orig_lat decimal
DECLARE @orig_lng decimal
SET @orig_lat=52.676 set @orig_lng=-1.6193
DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);
select cast(@orig as varchar)
Die POINT (-2 53)
gedruckt wird, was gibt Ihnen auch ein weiteres Stück von Informationen neben der Rundung: dass varchar-Format verwendet Länge-Breite statt Längengrad. Also, wenn Sie diese Punkte auf die andere Weise erstellen wollten, sollten Sie verwenden:
DECLARE @orig geography = 'POINT(-1.6193 52.676)'
DECLARE @dest geography = 'POINT(-1.595 55.0853)'
SELECT @orig.STDistance(@dest)
Hallo, danke für deine volle Antwort, das macht Sinn und funktioniert jetzt mit den Nachkommastellen. Das Tauschen von Breitengrad und Längengrad ist sicherlich verwirrend und in Bezug auf, aber ich denke, https://msdn.microsoft.com/en-us/library/bb933811.aspx sagt der Grund ist, dass, wenn es gedruckt wird es ausgetauscht wird, so ist es wie Kartenkoordinaten. – Panda