4 Floatwerte zu einem Linestring erstellen

philipp

Neuer Benutzer
Beiträge
1
Hi Leute,

ich versuche momentan aus 4 double Werten die 2 Punkte repäsentieren einen LineString zu generieren. Mir war es möglich mit geometry::point(Longitude, Latitude, 0) einen geometry Punkt zu erstellen. Leider gibt es für ein LineString kein solchen Konstruktor.

Um eine Linie zu erstellen aus zwei Punkten habe ich das gefunden:
geometry::STLineFromText('LINESTRING (100 100, 200 200)', 0);

Das heißt, ich müsste aus meinen 4 double Werten in der Datenbank erstmal Strings erzeugen um dann mit der Funktion ein geometry Line zu erstellen. Dies habe ich mit CAST und CONVERT probiert. Mein problem ist nun, das die Funktionen 5 stellen nach dem Komma einfach abschneiden, ich bräuchte aber ca 10 nachkommastellen :/.

Kann mir jemand eine Lösung nennen wie ich dieses Problem lösen könnte?

Grüße Philipp
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Da es in MS SQL keinen DOUBLE gibt, habe ich mal mit FLOAT getestet. Die Nachkommastellen lassen sich bei CONVERT über style bestimmen, siehe http://msdn.microsoft.com/de-de/library/ms187928.aspx . Da das vom Ergebniss her nicht wirklich schön ist, habe ich etwas improvisiert, kann sein das das je noch Anzahl der Stellen vor dem Komma noch Probleme gibt.
Code:
DECLARE    @wert FLOAT
 
SET        @wert = 1.0123456789
 
SELECT    @wert,
        convert(VARCHAR(100),@wert,2),
        left(replace(convert(VARCHAR(100),@wert,2),'.',''),cast(right(convert(VARCHAR(100),@wert,2),3) AS INT)+1) +
        '.' +
        right(left(convert(VARCHAR(100),@wert,2),len(convert(VARCHAR(100),@wert,2))-5),len(convert(VARCHAR(100),@wert,2))-2-5-cast(right(convert(VARCHAR(100),@wert,2),3) AS INT))
     
SET        @wert = 1234567890.0123456789
 
SELECT    @wert,
        convert(VARCHAR(100),@wert,2),
        left(replace(convert(VARCHAR(100),@wert,2),'.',''),cast(right(convert(VARCHAR(100),@wert,2),3) AS INT)+1) +
        '.' +
        right(left(convert(VARCHAR(100),@wert,2),len(convert(VARCHAR(100),@wert,2))-5),len(convert(VARCHAR(100),@wert,2))-2-5-cast(right(convert(VARCHAR(100),@wert,2),3) AS INT))
 
Oben