Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

4 Floatwerte zu einem Linestring erstellen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von philipp, 14 August 2012.

  1. philipp

    philipp Neuer Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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))
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden