Hi,

indem du dir das mal reinziehst. Das kann deine DB nämlich auch - ohne dass du noch was machen musst.
Ist aber eventuell für das Gooddy, was du noch einbauen möchstest, etwas viel Aufwand.

Kurzfassung: Alle deine Lösungsansätze verwenden konkrete OSM-Objekte (Nodes, is-in und ähnliches) und berücksichtigen nicht deren Lage im Raum. Mit PostGis kannst du jederzeit feststellen wie die örtlichen Bezüge zwischen verschiedenen Daten sind. (Z.B. “in welchem Land befindet sich diese Stadt?”).

Dazu gibt es Abfragen wie diese:


osm=# select id, coalesce(tags->'name',tags->'note') "liegt in",tags->'admin_level' "adminlevel" from relations
where st_contains(geom,(select geom from nodes where id=240028377))         
order by tags->'admin_level' desc;
   id    |       liegt in             | adminlevel 
---------+----------------------------+------------
 1189602 | 65189 Wiesbaden            | 
   62496 | Wiesbaden                  | 6
  286590 | Regierungsbezirk Darmstadt | 5
   62650 | Hessen                     | 4
   51477 | Deutschland                | 2
 1111111 | Deutschland                | 2
(6 rows)

Hier wurde der gesucht, in welchen Grenzen sich der Node 240028377 (place-node von Wiesbaden) befindet.
Der Knackpunkt ist hier “where **st_contains(**geom,(select geom from nodes where id=240028377))”

bei der mit osm2pgsql erstellten DB sieht es ähnlich aus, nur hab ich derzeit kein Beispiel parat.

“st_contains(planet_osm_polygon.way, planet_osm_point.way)” ist sicher nicht ganz korrekt, gibt dir aber einen kleinen Eindruck.

Gruss
walter