Ergebniss einer Abfrage in Variable speichern

Hallo ich arbeite noch nicht sehr lange mit PostGIS also Verzeiht mir wenn die Frage vielleicht ein alter Hut ist :wink: …:

Ich erstelle Gerade eine Datenbank mit verschiedenen Vegetationsklassen (auch Biotoptypen genannt). HIer bekomme ich auch von verschiedenen Leuten *shp Dateien zugeschickt.
Jetzt habe ich die *.shp Datei via shp2pgsql in eine *.sql Datei umegwandelt und die entstandene Geometrie:

BEGIN;
CREATE TABLE “bt_test” (gid serial PRIMARY KEY, “biotoptyp” varchar, “bemerkung” varchar, “shape_leng” numeric, “shape_area” numeric);
SELECT AddGeometryColumn(’’,‘bt_test’,‘the_geom’,‘31467’,‘MULTIPOLYGON’,2);
CREATE INDEX “bt_test_the_geom_gist” ON “bt_test” using gist (“the_geom” gist_geometry_ops);
INSERT INTO “bt_test” (“biotoptyp”,“bemerkung”,“shape_leng”,“shape_area”,the_geom) VALUES (‘ONZ’,NULL,‘3.05667502381e+002’,‘4.80918714016e+003’,‘SRID=31467;0106000000010000000103000000010000001D000000703D0A4F2B334A411C0DE085A5165641A089B0C927334A410A682290A2165641F675E0B425334A41C264AA70A3165641F697DD8B22334A41900F7A4AA21656416891ED2424334A4132C4B126A11656418026C25E1E334A41D49AE6E99E1656415817B7191A334A416891EDB89C165641B22E6E9B14334A41341136E49B165641D24D62D00E334A41FE43FA719C16564166F7E4F906334A412406818D9D165641764F1E0E02334A4130BB27339F165641FEF67590FF324A41FE43FA05A0165641F8E4610903334A41BE9F1AEFA116564134A2B40F07334A41C05B20E1A41656419EEFA7360A334A41C8293A6AA8165641DC6800F70E334A414C378929AC165641A245B6CB11334A41501E1666AD165641EE7C3F4518334A41D6E76A97AE16564180D93DD91B334A41B0506BB2AD1656411AE2584720334A418816D90EAD16564168B3EA6325334A41501E1666AD165641BC0512AC2D334A4104560EF1B0165641EA0434E930334A416C567D8EAF165641AE47E17A30334A41E2C798E7AD16564172F90FA131334A41325530E6AC16564128A0898034334A415839B440AC1656416ABC743B31334A41029A089BA71656413E0AD77B2D334A41ACFA5C1DA6165641703D0A4F2B334A411C0DE085A5165641’);
END;
GRANT SELECT ON bt_test TO PUBLIC; COMMENT ON TABLE bt_test IS ‘Aktualität: 18.02.09 - 09:54’;
mit

SELECT astext(the_geom) FROM bt_test;

in “lesbare” :slight_smile: Gauß-Krüger Koordinaten umgewandelt. Habt ihr vielleicht eine gute Idee wie ich das Ergebniss dieser Abfrage jetzt in die Tabelle bekomme?
Meine erste Idee war über:

SELECT AddGeometryColumn (‘bt_test’,‘btgeo_gk’,
31467,‘MULTIPOLYGON’,2);

Eine neue Spalte anzufügen und dann über

SELECT … INTO :btgeo_gk;

Das ganze quasi in die neue Geometriespalte einzufügen - Dannhabe ich ja aber immernoch die alte Spalte :confused: naja die könnte ich ja Droppen. Aber irgendwie bekomme ich gerade diese Schritte nicht in eine schlüssige Reinfolge. Wäre toll wenn mir da jemand helfen könnte :rolleyes: .???

Beste Grüße
Paul

Da bist Du mir weit voraus - ich arbeite noch gar nicht mit PostGIS.

… mit[/U]

SELECT astext(the_geom) FROM bt_test;

in “lesbare” > :slight_smile: > Gauß-Krüger Koordinaten umgewandelt. Habt ihr vielleicht eine gute Idee wie ich das Ergebniss dieser Abfrage jetzt in die Tabelle bekomme?
Meine erste Idee war über:

SELECT AddGeometryColumn (‘bt_test’,‘btgeo_gk’,
31467,‘MULTIPOLYGON’,2);

Eine neue Spalte anzufügen

Die SQL-Syntax, um eine neue Spalte in einer bestehenden Tabelle zu erzeugen, ist geringfügig anders. ALTER TABLE.

und dann über

SELECT … INTO :btgeo_gk;

Das ganze quasi in die neue Geometriespalte einzufügen

Auch hier geht das in SQL anders, mit UPDATE table SET …

  • Dannhabe ich ja aber immernoch die alte Spalte > :confused: > naja die könnte ich ja Droppen. Aber irgendwie bekomme ich gerade diese Schritte nicht in eine schlüssige Reinfolge. Wäre toll wenn mir da jemand helfen könnte > :rolleyes: > .???

Nun, anstall eine neue Spalte zu erzeugen und diese zu füllen, könntest Du auch einfach einen VIEW erstellen, der die Daten in der von Dir gewünschten Form enthält.


Wie gesagt, ich nix PostGIS, aber es würde mich wundern, wenn elementare Dinge wie oben da anders oder nicht gehen würden.


Andreas

Hallo!

Willkommen bei PostGIS, eine excellente Wahl :wink:

Was möchtest du denn genau tun? Du hast ja anscheinend die Geometrien bereits in der Datenbank (im Binärformat)? Die Geometrie wird im sog. WKB-Format abgelegt und kann z.B. von QGis oder ähnlichem direkt dargestellt werden. Falls du die Polygone ‘lesbar’ haben möchtest, kannst du sie in einem View auf die schon beschriebene Weise als Text darstellen, allerdings kann man damit auch eher wenig anfangen.

@akretschmar: Die Syntax stimmt für eine PostGIS-Geometriespalte stimmt schon so. Addgeometrycolumn macht ein normales AlterTable um die Spalte anzulegen, schreibt aber nebenbei noch einige Constraints für die Spalte/Tabelle und Metadaten in die zentrale Geometrie-Verwaltung.

Grüssle Uwe

Danke für die Erklärung, ich hatte etwas in dieser Art mir schon fast gedacht…

Andreas

Hallo Uwe,
Als Desktop GIS benutze ich den GDV Spatial Commander der liest auch die Daten aus PostGIS ein. In der Datenbank liegen die aus den ESRI *.shp umgewandelten Daten erstmal in kanonischen Hex Zahlen(nach meinen Mattekenntnissen müssten das zumindest solche sein :confused :slight_smile: vor, Sprich: 0106000000010000000103000000010000000800000050FC187309324A41ECE2366AEF16564104E78CD800324A417A14AECFE6165641D478E9D6FC314A4154522730E71656416C567D56FA314A41CC10C762E81656410E4FAF04FB314A418638D67DE91656418E537494ED314A412C651926ED165641441CEB02F4314A412C8716E9F316564150FC187309324A41ECE2366AEF165641

Dies ist dann in Gauß-Krüger Germany Zone 3 (SRID=31467) Folgendes Format:

“MULTIPOLYGON(((3433490.8992 5790653.6596,3433473.6918 5790619.245,3433465.679 5790620.7524,3433460.6757 5790625.5434,3433462.0366 5790629.9662,3433435.1598 5790644.5953,3433448.0228 5790671.642,3433490.8992 5790653.6596)))”

Da ich aber nicht nur die shp Dateien einlesen muss sondern auch Koordinaten so geliefert bekomme müsste ich diese schon von Anfang an in der Datenbank so aufbauen das ich auch GPS-Koordinaten und andere Datensätze dazu laden kann.
Also möchte ich das o.g Zellenformat in das untenstehende umwandeln mitr dem sich dann leichter weiterarbeitn lässt.

War das jetzt verständlich geantwortet :slight_smile:

Gruße
Paul

Hallo!
Ob sich damit leichter arbeiten lässt sei mal dahin gestellt :wink: .
Zumindest bei Polygonen und Punkten bekommst du mit WKT ein Übersichtsproblem. Du kannst WKT auch nicht direkt darstellen im Client. Du kannst aber auch auf die einzelnen Punkte eines Polygons oder einer Linie direkt zugreifen (z.B. st_pointn, u.a.) und mit st_x und st_y die Koordinaten eines Punkts direkt abfragen. Für alles andere würde ich einen View mit dem WKT-String anlegen wenn man das braucht, das spart dann auch die Updaterei des Strings, falls sich mal ne Geometrie ändert.

Geometrien kannst du mit geomfromtext in deine Geometriespalte schreiben z.B. mit

Update geomTable set
  the_geom = geomfromtext(['GEOMETRYTYPE(x1 y1[, x2 y2, .. ,xn yn])', SRID)

für gpx-Daten (die GPS-Tracks meine ich) bietet z.B. auch QGis ein Importmodul, das man zum Laden benutzen könnte…

Grüssle Uwe