bounding box

Hi Leute,
wieder mal eine Frage… :confused:

Kann man für eine Datenbank eine Boundinbox definieren, und die gesamten Elemente die darin enthalten sind eine neue datenbank speichern?
ich vermute nicht…

Ansonsten…
Ist es möglich auf eine Tabelle eine Boundingbox anzuwenden, und diese Ergebnisse in eine neue Tabelle zu speichen? Oder ist es besser eine View zu erstellen?
Wenn Ja, wäre mir ein kleines Beispiel hilfreich!

Vielen Dank!
Peter

Boundingbox? Postscript?

Ansonsten: das, was als Select geht, kann auch als VIEW-Definition dienen. Und: ein Beispiel von dem, was Du vorhast, wäre praktisch, um zu verstehen, was Du willst.

Andreas

Postscript? wie ist diese Antwort zu verstehen?
Ich hab mich ja extra ins PostGIS-Unterverzeichnis gepostet… oder?
Im speziellen interessieren mich räumliche Abfragen…

Die räumlichen Funktionen von PostGIS bieten die Möglichkeit, eine Boundingbox zu definieren. Jedoch würde ich gerne wissen wie ich am besten eine View erstelle, in der alle Daten einer Tabelle gespeichert werden, welche sich innerhalb der definierten Boundingbox befinden. Oder ob es sogar möglich ist diese Boundingbox über die gesamte Datenbank anzuwenden.

Ein Beispiel meinerseits zum Verständnis:
In einer (räumlichen)Datenbank befinden sich Straßendaten eines ganzen Landes, jedoch ist man nur an den Straßendaten einer bestimmten Stadt interessiert. -> eine Stadt kann mit einer Boundingbox eingegrenzt werden, das heißt alle Daten, die innerhalb dieser Boundingbox liegen, sollten in einer View gespeichert werden.

Ich hoffe, dass ich mich nun konkreter ausgedrückt habe, und würde mich über Antworten von PostGIS Nutzern freuen!
Danke,
Peter

zu 1.: Das geht schon, aber warum sollte man das tun?
zu 2.: Ja das geht auch. Der Pseudocode unten sollte weiterhelfen, die Suche nach den korrekten Schreibweisen in der Doku überlasse ich dem geneigten Leser zur Übung :wink:

select st_bbox(collect(the_geom)) from <meine_Tabelle> where Bla=blubb group by irgendwas

Ob ein View besser ist kommt drauf an. Wenn sich deine Boundingbox entsprechend des Tabelleninhalts dynamisch oft ändert ist ein View sinnvoll. Andernfalls kann eine fest erstellte Boundingbox schneller sein wenn man oft darauf zugreifen muß. In PostGIS 1.4 gibt es dann ‘prepared Geometrys’, die sollten einen View mit Geometrien gehörig beschleunigen können.

Gruß Uwe

danke für diesen tipp, werde es gleich mal ausprobiern… bei fragen und problemen greif ich gerne wieder auf deine hilfe zurück! :slight_smile:
gruß
peter

So hier bin ich wieder,
ich habe es nun fogendermaßen gelöst:
Erstens hab ich eine View erstellt, jedoch die Boundingbox hab eich anders definiert:

Create View <VIEW_NAME> as select * from <TABELLE> where the_geom
&& SetSRID(
     (
       SELECT ST_MakeBox3D(
         ST_GeomFromText( 'POINT( <x> <y> )', <SRID-integer> ),
         ST_GeomFromText( 'POINT( <x> <y> )', <SRID-integer> )
       )
      )::box3d, <SRID-integer> );

Das bringt mir das gewünschte Ergebnis…
@gisman: Ich wäre aber auch in deiner Abfrage (Pseudocode) interessiert. Das hat bei mir irgendwie nicht geklappt…

Danke,
Peter

Das war ja auch als Anregung gedacht, aus dem hohlen Bauch und der Hüfte und ohne Handbuch geschossen. Nächste Woche hab ich wieder ein bisschen mehr Zeit zum im Handbuch nachschlagen. :wink:

Gruß Uwe

Kleine Korrektur: Der PostGIS-Befehl zur Erstellung einer BoundingBox heist ST_Envelope. Dabei ist es wohl egal, welche Geometrien da reingefüttert werden, das von dir verwendetet ST_MakeBox braucht halt explizit die Punkte, die du selbst bestimmen musst.
Somit ergibt sich:

select st_envelope(collect(the_geom)) from <meine_Tabelle> where Bla=blubb group by irgendwas

Ob das ‘collect’ notwendig ist, must du ausprobieren, es dient nur dazu, die Geometrien nach Attributen zu gruppieren und daraus eine Collection zu erzeugen. Eventuell reicht auch

select st_envelope(the_geom) from <meine_tabelle>

wenn man eine Boundingbox über alle Geometrien haben will.

Grüssle Uwe

Gruß Uwe