[Talk-de] Relationsstruktur fuer geografische Einordnung

Florian Lohoff flo at rfc822.org
Do Okt 8 11:15:13 UTC 2009


On Thu, Oct 08, 2009 at 07:16:11AM +0200, Marcus Wolschon wrote:
> On 2009-10-07, Frederik Ramm <frederik at remote.org> wrote:
> > 1. Wir haben eine raeumliche Datenbank. Da kann man sowas anhand der
> > Daten feststellen. Wenn man es nicht kann, muss man seine Daten
> > verbessern oder seine Abfragemethoden - aber ob eine Kneipe in
> > Deutschland liegt oder in Frankreich, das moechte ich lieber anhand der
> > Grenze feststellen als anhand irgendwelcher Relationenzugehoerigkeiten!
> 
> Dann brauchen wir aber endlich eine andere Möglichkeit die Polygone zu finden
> in denen ein Punkt enthalten ist als nur "lade halt das Planet-File und prüfe
> alle Ways darin".
> Enthaltensein in Relationen kann man gut navigieren.
> Ich bevorzuge auch Polygone und zur Not Multipolygone
> aber wir können übr die nicht "nach oben" navigieren.

Also ich kann sowas in meiner postgres? Um es zu beschleunigen baut
man sich aus den boundarys polygone:

       insert into completeborders ( id, adminlevel, name, border, path )
                select  border.id,
                        border.adminlevel::integer,
                        border.name,
                        ST_BuildArea(ST_Collect(linestring)) as geom,
                        ?
                from    (
                        select  rm.id, rm.adminlevel, rm.name, w.linestring
                        from    ways w, (
                                select          rm.relation_id as id,
                                                rm.member_id as wayid,
                                                rt1.v as adminlevel,
                                                rt2.v as name
                                from            relation_members rm,
                                                relation_tags rt1,
                                                relation_tags rt2
                                where           rm.member_type = 'W'
                                and             rm.relation_id in ( ? )
                                and             rm.relation_id = rt1.relation_id
                                and             rm.relation_id = rt2.relation_id
                                and             rt1.k = 'admin_level'
                                and             rt2.k = 'name'
                                order by        id
                                ) rm
                        where   w.id = rm.wayid
                        and     ST_NumPoints(w.linestring)>1
                ) as border
                group by border.id, border.adminlevel, border.name


Dann einfach mal fragen in welchen polygonen das ist:

osm=> select * from node_tags where k='name' and v='Mastholte';
  node_id  |  k   |     v     
-----------+------+-----------
 248064797 | name | Mastholte
(1 row)

sm=> select cb.id,cb.adminlevel,cb.name from completeborders cb, nodes n where n.id = 248064797 and ST_Within(n.geom, cb.border) order by adminlevel desc;
  id   | adminlevel |           name           
-------+------------+--------------------------
 78758 |          8 | Rietberg
 62379 |          6 | Kreis Gütersloh
 73347 |          5 | Regierungsbezirk Detmold
 62761 |          4 | Nordrhein-Westfalen
(4 rows)

Time: 65.338 ms

D.h. der Stadtteil Mastholte gehoert zu Rietberg, Kreis Gütersloh,
Regierungsbezirk Detmold in Nordrhein Westfalen. Alles kein Hexenwerk ...

Flo
-- 
Florian Lohoff                                         flo at rfc822.org
"Es ist ein grobes Missverständnis und eine Fehlwahrnehmung, dem Staat
im Internet Zensur- und Überwachungsabsichten zu unterstellen."
- - Bundesminister Dr. Wolfgang Schäuble -- 10. Juli in Berlin 
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : <http://lists.openstreetmap.org/pipermail/talk-de/attachments/20091008/86d5fd18/attachment.sig>


Mehr Informationen über die Mailingliste Talk-de