Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
On Thu, Jun 09, 2011 at 06:48:54PM +, Sven Geggus wrote: > Hallo zusammen, > > vielleicht kann ja jemand von euch ein wenig helfen. > > Ich versuche einen SQL Befehl zu basteln, der Mittelpunkt einer > Fläche ausgibt (ST_PointOnSurface). > > Dazu muss man wohl zuerst aus Punkten eine Fläche machen und dann mit > hilfe von ST_PointOnSurface den Mittelpunkt der Fläche zu ermitteln. > > > osmdb=> select nodes from ways where id=99382824; > nodes > -- > {1149487195,1149487106,1149487674,1149487557,1149487195} > (1 Zeile) > > Da fängt jetzt mein Problem schon an. "nodes" ist ein bigint[] > > Wie mache ich jetzt ein select für alle diese nodes in der Liste? > > Also folgendes hätte ich gerne: > > * liste der nodes aus Tabelle ways > * geometrien aller dieser nodes aus Tabelle nodes > * Polygon aus disen Geometrien (ST_) > * ST_PointOnSurface(Polygon) SELECT ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom))) FROM (SELECT unnest(nodes) FROM ways WHERE id = 99382824) as w, nodes n WHERE w.unnest = n.id; aber ich wuerde es eher damit versuchen (geht schneller): SELECT ST_Centroid(ST_Collect(n.geom)) FROM (SELECT unnest(nodes) FROM ways WHERE id = 99382824) as w, nodes n WHERE w.unnest = n.id; Und vermutlich willst du auch noch in 900913 transformieren. Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Jetzt mal generell: Warum kann man nicht wie bisher mit osm2pgsql eine hstore DB updaten? Warum braucht man osmosis? Bei dem bisherigen Datenbankschema kann man ja auch andere Tabellen herausfiltern und wir haben nicht die Probleme, wie man dies oder jenes nun abfragt. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
ganz einfach: weil die mit osm2pgsql erzeugte datenbank besser zum rendern geeignet ist und die mit osmosis im snapshot-schema gepflegte dafür vielseitiger ist. beide haben ihre vor- und nachteile. gruss walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6459444.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
st_centroid berechnet die Mittelpunkt des Polygons; dieser kann aber bei bestimmten Formen des Polygons durchaus ausserhalb der Fläche liegen (z.B. Bumerang oder U). st_pointOnSurface garantiert, dass der Punkt innerhalb der Fläche liegt; dieser kann aber nicht immer im Zentrum sein, wenn da ein Stück fehlt. gruss walter p.s. das gilt übrigens für ALLE Datenbank-Schemata, die hier so benutzt werden - auch das mit osm2pgsql erzeute. Wenn die Mapnik-Leute im Template für das Rendern den centroid gegen pointonsurface auswechseln würden, lägen manche Ortsbezeichnungen nicht mehr auf fremden Stadtgebiet. (Eltville am Rhein) - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6459492.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Alexander Matheisen wrote: > > Warum kann man nicht wie bisher mit osm2pgsql eine hstore DB updaten? Das mit osmosis erzeugte snapshot-schema enthält selbstverständlich auch einen hstore. Ausserdem haben "wir" keine Probleme damit - eventuell nur du? Gruss Walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6459514.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Alexander Matheisen wrote: > Warum kann man nicht wie bisher mit osm2pgsql eine hstore DB updaten? Weil es keinen Sinn ergibt wenn wir sowieso Spezialdatenbaken erzeugen. Die osmosis Datenbank ist einfach universeller und hat außerdem auch schon länger ebenfalls einen hstore. Gruss Sven -- How to prevent Java from forking? Use a spoon. (Found on http://slashdot.org) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
On Thu, Jun 09, 2011 at 01:26:38PM -0700, Walter Nordmann wrote: > st_centroid berechnet die Mittelpunkt des Polygons; dieser kann aber bei > bestimmten Formen des Polygons durchaus ausserhalb der Fläche liegen (z.B. > Bumerang oder U). > > st_pointOnSurface garantiert, dass der Punkt innerhalb der Fläche liegt; > dieser kann aber nicht immer im Zentrum sein, wenn da ein Stück fehlt. Korrekt. Die Centroid-Methode hat aber den Vorteil, dass sie immer funktioniert, selbst dann, wenn das Polygon gerade kaputt ist. Es kommt halt auf den Anwendungsfall an. Gruss Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes?->?Polygon?
Sarah Hoffmann wrote: > SELECT ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom))) >FROM (SELECT unnest(nodes) >FROM ways WHERE id = 99382824) as w, nodes n > WHERE w.unnest = n.id; Danke! Das sieht doch schonmal gut aus: http://www.openstreetmap.org/?zoom=18&mlat=48.22436155&mlon=8.58008285781844 900913 brauch ich dafür nicht. Soll ja kml werden. Gruss Sven -- "Der wichtigste Aspekt, den Sie vor der Entscheidung für ein Open Source-Betriebssystem bedenken sollten, ist, dass Sie kein Windows-Betriebssystem erhalten." (von http://www.dell.de/ubuntu) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Am Donnerstag, den 09.06.2011, 13:32 -0700 schrieb Walter Nordmann: > Alexander Matheisen wrote: > > > > Warum kann man nicht wie bisher mit osm2pgsql eine hstore DB updaten? > Das mit osmosis erzeugte snapshot-schema enthält selbstverständlich auch > einen hstore. > > Ausserdem haben "wir" keine Probleme damit - eventuell nur du? Ich sicher nicht, aber wenn das neue System keinen nennenswerten Vorteil bringen würde, dann muss man sich ja nicht unnötige Arbeit machen. Waren auch nur Überlegungen eines Außenstehenden. Nun weiß ich ja auch, warum die osmosis-Lösung besser ist. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Am Donnerstag, den 09.06.2011, 20:38 + schrieb Sven Geggus: > Alexander Matheisen wrote: > > > Warum kann man nicht wie bisher mit osm2pgsql eine hstore DB updaten? > > Weil es keinen Sinn ergibt wenn wir sowieso Spezialdatenbaken > erzeugen. Die osmosis Datenbank ist einfach universeller und hat > außerdem auch schon länger ebenfalls einen hstore. Wie werden die Spezialdatenbanken erzeugt? Ein simples INSERT/SELECT? Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Alexander Matheisen wrote: > Wie werden die Spezialdatenbanken erzeugt? Ein simples INSERT/SELECT? /s/datenbanken/tabellen Sorry Sven -- Den Rechtsstaat macht aus, dass Unschuldige wieder frei kommen (Wolfgang Schäuble) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Am Freitag, den 10.06.2011, 07:49 + schrieb Sven Geggus: > Alexander Matheisen wrote: > > > Wie werden die Spezialdatenbanken erzeugt? Ein simples INSERT/SELECT? > > /s/datenbanken/tabellen Statt hier so kleinlich die Fehler anderer zu verbessern, könntest du mal direkt auf meine Frage antworten. Ich fasse deine Reaktion einfach mal als "Ja" auf. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Alexander Matheisen wrote: > Statt hier so kleinlich die Fehler anderer zu verbessern Dir ist aber schon klar, dass ich einen Fehler von _mir_ selbst korrigiert habe. Also nochmal zum mitschreiben: Ich habe fälschlicherweise Datenbanken geschrieben anstatt Tabellen. Die Idee ist, dass ich eine neue Datenbank mit osmosis schema aufsetze und sich jeder für seine Anwendungen daraus per SQL script, shell, perl, python oder was auch immer, einmal am Tag oder so Spezialtabellen für die eigene Anwendung baut. Gruss Sven P.S.: Warum sind wir nicht längst auf der devserver Liste solche Details interessieren hier doch keinen mehr. -- Microsoft ist offenbar die einzige Firma, die in der Lage ist, ein mit Office nicht kompatibles Bürosoftwarepaket einzuführen. (Florian Weimer in de.alt.sysadmin.recovery) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von nodes -> Polygon?
Am Freitag, den 10.06.2011, 13:38 + schrieb Sven Geggus: > Alexander Matheisen wrote: > > > Statt hier so kleinlich die Fehler anderer zu verbessern > > Dir ist aber schon klar, dass ich einen Fehler von _mir_ selbst korrigiert > habe. Also nochmal zum mitschreiben: Ich habe fälschlicherweise Datenbanken > geschrieben anstatt Tabellen. Weil du das als Antwort auf meine Frage geschrieben hattest, dachte ich, das bezog sich nur auf das "Spezialdatenbanken" in meinem Text. Ich glaube, jeder wusste trotzdem, was gemeint war. > Die Idee ist, dass ich eine neue Datenbank mit osmosis schema aufsetze und > sich jeder für seine Anwendungen daraus per SQL script, shell, perl, python > oder was auch immer, einmal am Tag oder so Spezialtabellen für die eigene > Anwendung baut. Meine Frage stellte sich mir, weil es in osmosis den Task --read-pgsql gibt. Aber ist eigentlich von sich aus logisch, dass man eine Postgres DB mit dem üblichen SQL abfragen kann. > P.S.: Warum sind wir nicht längst auf der devserver Liste solche Details > interessieren hier doch keinen mehr. Dann wechseln wir eben rüber, bezieht sich eh nur noch auf den Devserver. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
Moin, Ich treibe die Frage mal noch weiter. Vielleciht geht es ja tatsächlich mit einem einzigen query alle flächenhaften microbrewery POI zu selektieren. Momentan geht folgendes: Ich selektiere mir alle id die mich interessieren: SELECT id FROM ways WHERE (tags ? 'microbrewery') and (tags->'microbrewery'='yes'); Dann mache ich den folgenden request indem ich über alle id iteriere: SELECT astext(ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom FROM (SELECT unnest(nodes) FROM ways WHERE id = ...) as w, nodes n WHERE w.unnest = n.id; So funktioniert das zwar aber es geht bestimmt noch eleganter. Mein Problem liegt konkret darin, dass ich das "WHERE id = ..." nicht mit "WHERE (tags ? 'microbrewery')" ersetzen kann, weil ich ja die einzelnen Gruppen von nodes mit ST_MakeLine bearbeiten möchte und nicht alle nodes mit diesem tag. Gruss Sven -- "Dynamische IP-Nummern sind Security-Homöopathie." (Kristian Köhntopp) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
> So funktioniert das zwar aber es geht bestimmt noch eleganter. > > Mein Problem liegt konkret darin, dass ich das "WHERE id = ..." nicht > mit "WHERE (tags ? 'microbrewery')" ersetzen kann, weil ich ja die > einzelnen Gruppen von nodes mit ST_MakeLine bearbeiten möchte und > nicht alle nodes mit diesem tag. Ich bin mittlerweile beim gleichen Problem angelangt. Mich würde es auch interessieren, wie es gemacht wird... Wie machst du es denn jetzt? Ein Programm, in dem du dann die IDs zwischenspeicherst und dann die zweite Abfrage laufen lässt? Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
Sven Geggus wrote: > > Ich treibe die Frage mal noch weiter. Vielleicht geht es ja > tatsächlich mit einem einzigen query alle flächenhaften microbrewery > POI zu selektieren. > hi Sven, manchmal hilt es mir und anderen, das Problem mal wirklich genau zu beschreiben. Am Anfang (Thread-Start) wolltest du das Zentrum von Flächen finden; jetzt suchst das was mit flächenhaften Objekten. Ich sehe da schon einen gewissen Zusammenhang, aber was suchst du genau Alle Brauereien, die als Area/Polygon eingetragen sind? Wie sind die getaggt? Welches DB-Schema? osm2pgsql oder osmosis mit hstore? Und schick mal die ID eines Beispielbereiches rüber. dann schau ich mir das mal an. Gruss Walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6463555.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
> Am Anfang (Thread-Start) wolltest du das Zentrum von Flächen finden; jetzt > suchst das was mit flächenhaften Objekten. > Ich sehe da schon einen gewissen Zusammenhang, aber was suchst du genau > > Alle Brauereien, die als Area/Polygon eingetragen sind? > Wie sind die getaggt? > Welches DB-Schema? osm2pgsql oder osmosis mit hstore? Wenn ich das richtig verstanden habe, geht es darum, dass bei der Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen Punkten berechnet wird und nicht nur zwischen den Punkten der jeweiligen Einzelflächen. Es geht um das osmosis Schema. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
Alexander Matheisen wrote: > > Wenn ich das richtig verstanden habe, geht es darum, dass bei der > Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen > Punkten berechnet wird und nicht nur zwischen den Punkten der jeweiligen > Einzelflächen. Es geht um das osmosis Schema. > Hi Alexander, von mehreren Flächen, deren gemeinsamer Mittelpunkt bestimmt werden soll, war -bisher- nicht die Rede. Da es höchstwahrscheinlich um das Osmosis-Snapshot Schema handelt und Sven verzweifelt versucht, aus Nodes Flächen zusammenzubauen, frage ich mich langsam was das soll. Ich vermute, Sven hat einfach vergessen, linestring und bbox als optionale Spalten der Ways-Tabelle anzulegen. @sven: bitte "\d ways" in psql eingeben und Ergebnis posten. so sollte das aussehen: gis=# \d ways Tabelle »public.ways« Spalte| Typ | Attribute --+-+--- id | bigint | not null version | integer | not null user_id | integer | not null tstamp | timestamp without time zone | not null changeset_id | bigint | not null tags | hstore | nodes| bigint[]| bbox | geometry| linestring | geometry| Indexe: "pk_ways" PRIMARY KEY, btree (id) "idx_ways_bbox" gist (bbox) "idx_ways_linestring" gist (linestring) wenn alles ok ist, geht das so: select id, tags->'name' "name", st_Astext(linestring) "way", st_Astext(st_PointOnSurface(linestring)) "Center" from ways where tags ? 'microbrewery' limit 3; id|name| way |Center --++--+-- 45360471 | Wirtschaftswunder | LINESTRING(9.002598 48.7214827,9.0028258 48.7215596,9.002932 48.7214227,9.0027042 48.7213458,9.002598 48.7214827) | POINT(9.0028258 48.7215596) 50241169 | Brauereigasthof Göller | LINESTRING(10.9715219 49.9409466,10.9715545 49.9408561,10.9716667 49.9408737,10.9717391 49.9408831,10.9717178 49.9409456,10.9717084 49.940973,10.9715219 49.9409466) | POINT(10.9716667 49.9408737) 50308663 | Enzensteiner Brauerei / Biergarten | LINESTRING(11.3679454 49.5623391,11.368205 49.5622779,11.3682603 49.5623704,11.3679972 49.5624301,11.3679454 49.5623391) | POINT(11.368205 49.5622779) (3 Zeilen) Gruss Walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6463654.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
On Fri, Jun 10, 2011 at 06:13:06PM +, Sven Geggus wrote: > Moin, > > Ich treibe die Frage mal noch weiter. Vielleciht geht es ja > tatsächlich mit einem einzigen query alle flächenhaften microbrewery > POI zu selektieren. > > Momentan geht folgendes: > > Ich selektiere mir alle id die mich interessieren: > > SELECT id FROM ways WHERE (tags ? 'microbrewery') and > (tags->'microbrewery'='yes'); > > Dann mache ich den folgenden request indem ich über alle id > iteriere: > > SELECT astext(ST_PointOnSurface(ST_MakePolygon(ST_MakeLine(n.geom > FROM (SELECT unnest(nodes) FROM ways WHERE id = ...) as w, nodes n > WHERE w.unnest = n.id; Das geht mit etwas Gruppierungsmagie, aber irgendwie wird es dann ineffizient. Die beste Methode ist, sich eine Funktion zu definieren: CREATE FUNCTION make_way_geometry(id bigint) RETURNS geometry AS $$ SELECT ST_MakeLine(n.geom) FROM (SELECT unnest(nodes), id FROM ways w WHERE id = $1) as w, nodes n WHERE w.unnest = n.id $$ LANGUAGE SQL; Dann kannst du ganz bequem schreiben: SELECT id, astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id FROM ways WHERE Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
On Fri, Jun 10, 2011 at 01:20:33PM -0700, Walter Nordmann wrote: > > Alexander Matheisen wrote: > > > > Wenn ich das richtig verstanden habe, geht es darum, dass bei der > > Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen > > Punkten berechnet wird und nicht nur zwischen den Punkten der jeweiligen > > Einzelflächen. Es geht um das osmosis Schema. > > > Hi Alexander, > > von mehreren Flächen, deren gemeinsamer Mittelpunkt bestimmt werden soll, > war -bisher- nicht die Rede. > > Da es höchstwahrscheinlich um das Osmosis-Snapshot Schema handelt und Sven > verzweifelt versucht, aus Nodes Flächen zusammenzubauen, frage ich mich > langsam was das soll. > Ich vermute, Sven hat einfach vergessen, linestring und bbox als optionale > Spalten der Ways-Tabelle anzulegen. Kommt darauf an. Ich finde es ein bisschen uebertrieben, fuer 100 Mio. Wege linestrings anzulegen, weil man fuer 171 Microbreweries die Flaechen braucht. Insofern ist Sven's Ansatz, das beim Ableiten seiner Tabelle zu machen, wesentlich effizienter. Sarah ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste?von?nodes?->?Polygon?
Walter Nordmann wrote: > hi Sven, manchmal hilt es mir und anderen, das Problem mal wirklich genau zu > beschreiben. OK, noch mal von vorne... Gegeben: DB im Osmosis schema, ganz analog zum osm Dateiformat relevante Tabellen: Tabelle »public.ways« Spalte| Typ | Attribute --+-+--- id | bigint | not null version | integer | not null user_id | integer | not null tstamp | timestamp without time zone | not null changeset_id | bigint | not null tags | hstore | nodes| bigint[]| Tabelle »public.nodes« Spalte| Typ | Attribute --+-+--- id | bigint | not null version | integer | not null user_id | integer | not null tstamp | timestamp without time zone | not null changeset_id | bigint | not null tags | hstore | geom | geometry| Nun möchte ich daraus letztendlich wie bisher das kml für die Brewpub Map erzeugen. Nur ist das bisher halt erheblich einfacher weil in der osm2pgsql DB ja schon flächenhafte Elemente drin sind. Beim osmosis Schema muss ich mir diese natürlich erst zusammenbauen. Als Zwischenziel möchte ich dafür als erstes mal alle Flächen aus der ways tabelle selektieren die ein "microbrewery"="yes" haben, deren Schwerpunkt berechnen und das Ergebnis mit "astext" ausgeben. Wenn ich die node id kenne geht das mit dem Lösungsvorschlag von Sarah. Ich kann allerdings statt einer einzelnen node-id nicht einfache eine andere where Bedingung verwenden, die mehrere Ergebnisse liefert, weil mir der unnest sonst alle nodes zu einer Fläche machen will. Gruss Sven -- Trotz der zunehmenden Verbreitung von Linux erfreut sich der Bär, und - dank Knut - insbesondere der Eisbär, deutlich größerer Beliebtheit als der Pinguin. (Gefunden bei http://telepolis.de/) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
Am Freitag, den 10.06.2011, 13:20 -0700 schrieb Walter Nordmann: > Alexander Matheisen wrote: > > > > Wenn ich das richtig verstanden habe, geht es darum, dass bei der > > Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen > > Punkten berechnet wird und nicht nur zwischen den Punkten der jeweiligen > > Einzelflächen. Es geht um das osmosis Schema. > von mehreren Flächen, deren gemeinsamer Mittelpunkt bestimmt werden soll, > war -bisher- nicht die Rede. Ich hätte es besser so ausdrücken sollen: Wenn ich das richtig verstanden habe, geht es darum, dass bei der Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen gefundenen Objekten berechnet wird statt zwischen den Punkten der jeweiligen Einzelflächen. Also konkret: Es bildet den Mittelpunkt zwischen allen Brewpubs und nicht nur zwischen den Punkten eines einzelnen Brewpub-Ways. > Da es höchstwahrscheinlich um das Osmosis-Snapshot Schema handelt und Sven > verzweifelt versucht, aus Nodes Flächen zusammenzubauen, frage ich mich > langsam was das soll. > Ich vermute, Sven hat einfach vergessen, linestring und bbox als optionale > Spalten der Ways-Tabelle anzulegen. Ich denke, man sollte die aber nur beim Erzeugen der Spezialtabellen anlegen, also nur bei den Objekten erzeugen, bei denen das zur Zeit nötig ist: Brewpubs, Briefkästen, Telefonzellen und den Objekten für meine OLM. Ich denke das ist besser als das bei allen Objekten zu erzeugen, die dann eh keiner nutzt. Ansonsten ist das natürlich praktischer bei der Abfrage. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
> > Da es höchstwahrscheinlich um das Osmosis-Snapshot Schema handelt und Sven > > verzweifelt versucht, aus Nodes Flächen zusammenzubauen, frage ich mich > > langsam was das soll. > > Ich vermute, Sven hat einfach vergessen, linestring und bbox als optionale > > Spalten der Ways-Tabelle anzulegen. > > Kommt darauf an. Ich finde es ein bisschen uebertrieben, fuer 100 Mio. Wege > linestrings anzulegen, weil man fuer 171 Microbreweries die Flaechen > braucht. Insofern ist Sven's Ansatz, das beim Ableiten seiner Tabelle > zu machen, wesentlich effizienter. +1 Mit der Funktion, die du gepostet hattest, lässt sich das wohl auf die Art einfach machen. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
> Das geht mit etwas Gruppierungsmagie, aber irgendwie wird es dann > ineffizient. Die beste Methode ist, sich eine Funktion zu definieren: > > CREATE FUNCTION make_way_geometry(id bigint) RETURNS geometry >AS $$ SELECT ST_MakeLine(n.geom) > FROM (SELECT unnest(nodes), id > > FROM ways w WHERE id = $1) as w, > nodes n > WHERE w.unnest = n.id >$$ LANGUAGE SQL; > > Dann kannst du ganz bequem schreiben: > > SELECT id, astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id > FROM ways WHERE Hört sich gut an, muss ich dann morgen mal testen. Macht die Abfragen etwas übersichtlicher, schade, dass ich meine jetzt nochmal abändern kann... Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste?von?nodes?->?Polygon?
Sven Geggus wrote: > > relevante Tabellen: > > Tabelle »public.ways« > Spalte| Typ | Attribute > --+-+--- > id | bigint | not null > version | integer | not null > user_id | integer | not null > tstamp | timestamp without time zone | not null > changeset_id | bigint | not null > tags | hstore | > nodes| bigint[]| > | > da fehlen die optionalen Spalten "linestring" und "bbox". Die kann/sollte mal beim Anlegen der Tabellen unbedingt mit erzeugen. siehe: scripts/pgsnapshot_schema_0.6_linestring.sql -- Add a postgis GEOMETRY column to the way table for the purpose of storing the full linestring of the way. SELECT AddGeometryColumn('ways', 'linestring', 4326, 'GEOMETRY', 2); CREATE INDEX idx_ways_linestring ON ways USING gist (linestring); und analoges für bbox. Dann erzeugt dir osmosis ganz automatisch linesting (way, der die nodes verbindet als polygon) und gegebenenfalls auch die bbox. > Nun möchte ich daraus letztendlich wie bisher das kml für die Brewpub > Map erzeugen. Nur ist das bisher halt erheblich einfacher weil in > der osm2pgsql DB ja schon flächenhafte Elemente drin sind. Beim > osmosis Schema muss ich mir diese natürlich erst zusammenbauen. NEIN NEIN NEIN, wenn du -endlich- das Feld "ways.linestring" anlegst hast du die auch. > Als Zwischenziel möchte ich dafür als erstes mal alle Flächen aus der > ways tabelle selektieren die ein "microbrewery"="yes" haben, deren > Schwerpunkt berechnen und das Ergebnis mit "astext" ausgeben. siehe mein Beispiel > Wenn ich die node id kenne geht das mit dem Lösungsvorschlag von > Sarah. Ich kann allerdings statt einer einzelnen node-id nicht > einfache eine andere where Bedingung verwenden, die mehrere > Ergebnisse liefert, weil mir der unnest sonst alle nodes zu einer > Fläche machen will. > ich hoffe mal ganz stark, dass sich deine Antwort und meine vorigen Infos überschnitten haben. Gruss walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6463852.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema) liste von?nodes?->?Polygon?
Alexander Matheisen wrote: > > Wenn ich das richtig verstanden habe, geht es darum, dass bei der > Abfrage von mehreren Objekten nach Tag der Mittelpunkt zwischen allen > gefundenen Objekten berechnet wird statt zwischen den Punkten der > jeweiligen Einzelflächen. Also konkret: Es bildet den Mittelpunkt > zwischen allen Brewpubs und nicht nur zwischen den Punkten eines > einzelnen Brewpub-Ways. Was soll das den?? Wofür soll das den gut sein? > Ich vermute, Sven hat einfach vergessen, linestring und bbox als optionale >> Spalten der Ways-Tabelle anzulegen. > > Ich denke, man sollte die aber nur beim Erzeugen der Spezialtabellen > anlegen, also nur bei den Objekten erzeugen, bei denen das zur Zeit > nötig ist: Brewpubs, Briefkästen, Telefonzellen und den Objekten für > meine OLM. Ich denke das ist besser als das bei allen Objekten zu > erzeugen, die dann eh keiner nutzt. > total falscher Ansatz; hier wird am falschen Ende gespart. Etwas Plattenplatz gegenüber einem erheblichen Aufwand, sich "nur die notwendigen" Sachen zusammenzubasteln. Morgen kann schon etwas fehlen, was man vergessen hat - und dann geht die ganze Sache wieder von vorne los. Das war für mich übrigens der Grund, vor ca 1 Jahr von osm2pgsql nach osmosis zu wechseln weil immer wieder Daten fehlten, die man zwar nicht zum Rendern braucht aber dennoch plötzlich dringend benötigt wurden. Nochmal: Hier wird am falschen Ende gespart und unnötiger Stress erzeugt. Gruss Walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6463877.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
Sarah Hoffmann wrote: > Das geht mit etwas Gruppierungsmagie, aber irgendwie wird es dann > ineffizient. Die beste Methode ist, sich eine Funktion zu definieren: > > CREATE FUNCTION make_way_geometry(id bigint) RETURNS geometry > AS $$ SELECT ST_MakeLine(n.geom) >FROM (SELECT unnest(nodes), id > >FROM ways w WHERE id = $1) as w, >nodes n >WHERE w.unnest = n.id > $$ LANGUAGE SQL; > > Dann kannst du ganz bequem schreiben: > > SELECT id, astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id >FROM ways WHERE OK ich seh schon, meine SQL Kenntnisse sind immer noch deutlich ausbaufähig... SELECT tags->'name',astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id FROM ways WHERE (tags ? 'microbrewery') and (tags->'microbrewery'='yes'); Sieht doch richtig gut aus. Jetzt muss ich eigentlich "nur noch" Datenbank und Aktualisierung auf dem devserver aufsetzen. Super, Danke! Gruss Sven -- /* Fuck me gently with a chainsaw... */ (David S. Miller in /usr/src/linux/arch/sparc/kernel/ptrace.c) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
Walter Nordmann wrote: >> Nun möchte ich daraus letztendlich wie bisher das kml für die Brewpub >> Map erzeugen. Nur ist das bisher halt erheblich einfacher weil in >> der osm2pgsql DB ja schon flächenhafte Elemente drin sind. Beim >> osmosis Schema muss ich mir diese natürlich erst zusammenbauen. > NEIN NEIN NEIN, wenn du -endlich- das Feld "ways.linestring" anlegst hast du > die auch. Wenn man ohnehin Spezialtabellen erzeugt ist es erheblich effizienter diese nur für die Spezialtabellen zu erzeugen und nicht global für alle ways. Gruss Sven -- "Dynamische IP-Nummern sind Security-Homöopathie." (Kristian Köhntopp) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
deine Entscheidung - dein Problem Gruss Walter - Wenn du den Wald vor lauter Bäumen nicht siehst, fälle die Bäume und du wirst sehen, dass da kein Wald ist. -- View this message in context: http://gis.638310.n2.nabble.com/postgresql-osmosis-schema-liste-von-nodes-Polygon-tp6459170p6464085.html Sent from the Germany mailing list archive at Nabble.com. ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
> SELECT > tags->'name',astext(ST_PointOnSurface(ST_MakePolygon(make_way_geometry(id > FROM ways WHERE (tags ? 'microbrewery') and (tags->'microbrewery'='yes'); > > Sieht doch richtig gut aus. Jetzt muss ich eigentlich "nur noch" Datenbank und > Aktualisierung auf dem devserver aufsetzen. OK, dann kann ich meine Abfragen jetzt noch verbessern und bis dahin läuft vielleicht schon die DB. Super, jetzt geht es vorwärts... Welchen Namen wird die DB haben? Muss ich dann nämlich noch in meinen Scripten anpassen. Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
Alexander Matheisen wrote: > Welchen Namen wird die DB haben? Muss ich dann nämlich noch in meinen > Scripten anpassen. Keine Ahnung. Für mich steht jetzt erst mal ein Systemupdate an und das muss ich jetzt erst mal aklären welche Option ich da wähle. Wird also sicher noch nen Moment dauern. Gruss Sven -- Kernel panic: I have no root and I want to scream (Linux Kernel Error Message) /me is giggls@ircnet, http://sven.gegg.us/ on the Web ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de
Re: [Talk-de] postgresql (osmosis schema)?liste?von?nodes?->?Polygon?
Am Sonntag, den 12.06.2011, 09:26 + schrieb Sven Geggus: > Alexander Matheisen wrote: > > > Welchen Namen wird die DB haben? Muss ich dann nämlich noch in meinen > > Scripten anpassen. > > Keine Ahnung. Für mich steht jetzt erst mal ein Systemupdate an und > das muss ich jetzt erst mal aklären welche Option ich da wähle. > > Wird also sicher noch nen Moment dauern. Gibt es irgendwelche Fortschritte zu verzeichnen? Alex ___ Talk-de mailing list Talk-de@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-de