Kreiskoordinaten manipulieren

Probleme, Fragen die mit der Installation und Anwendung der PostGIS-Erweiterung zu tun haben.
pgSteffen
Benutzer
Beiträge: 78
Registriert: Di 14. Dez 2010, 09:46

Re: Kreiskoordinaten manipulieren

Beitrag von pgSteffen » Mo 8. Aug 2016, 11:14

Hallo,
so hier erst mal die WKT-Lösung ohne Unterabfrage:

Code: Alles auswählen

select *,
  st_setsrid(
    st_geomfromtext
    (
      array_to_string( 
          array_append( 
              array_append(
                   (string_to_array(ST_AsText(shape),','))[1:3],
                      substring((string_to_array(ST_AsText(shape),','))[5],
                                 1,length((string_to_array(ST_AsText(shape),','))[5])-1))
                        ,(string_to_array( substring(ST_AsText(shape),19),','))[1])
                    ,',') 
                       || ')')
   ,25833) as sid_shape from fremdtabelle 
Schön bzw. übersichtlich sieht anders aus :rolleyes: . Einer Unterabfrage würde das Ganze vereinfachen - ich habe es aber im Moment noch nicht so richtig mit Unterabfragen, da diese in MSAccess recht wenig performant waren.

@Uwe:
Die Überführung des Circularstrings in einen Linstring und zurück überlasse ich den geneigten Leser zur Übung ;)
Das würde bei mir dann so aussehen:

Code: Alles auswählen

select *,
  st_setsrid(st_geomfromtext('CIRCULARSTRING Z' || 
    substr(ST_AsText(st_addpoint(st_removepoint(t1.geom, 3), st_startpoint(t1.geom))),14)) ,25833) as sid_shape
		from (select *, st_geomfromtext( 
			'linestring Z' || substr(ST_AsText(shape),17)
			) as geom from fremdtabelle) t1 
Muss jetzt mal schauen, wie die Geschwindigkeiten der beiden Varianten sind.

[EDIT]Variante 1 ist doch um ca. 30% schneller. Da werde ich wohl doch auf die unübersichtliche Variante setzen.[/EDIT]

[EDIT2]Diese Variante ist dann doch die Schnellste:

Code: Alles auswählen

select *,
       st_setsrid( st_geomfromtext('CIRCULARSTRING Z' || 
           substr(ST_AsText(st_addpoint(st_removepoint(
                               st_geomfromtext('linestring Z' || substr(ST_AsText(shape),17) ), 3), 
                            st_startpoint(st_geomfromtext('linestring Z' || substr(ST_AsText(shape),17) )
                                         ))),14)
                 ),25833) as sid_shape
from fremdtabelle
[/EDIT2]

Vielen Dank für eure Hilfen!!


Gruß Steffen

Antworten