[OSM-Devserver] Suche Mapnik-Style um auf tirex/hstore zuzugreifen

Kay Drangmeister kay at drangmeister.net
Fr Apr 9 12:41:34 CEST 2010


Hallo Leute,

ich brauche mal Anfängerhilfe für hstore usw. Ziel ist es, mein osm.xml
anzupassen an hstore.

(Tobias hat mich freundlicherweise auf einen Style aufmerksam gemacht, der
hier /osm/tirex-styles/osm-hstore liegen soll, aber der ist "leer".)

Ich hab mir mal einen Weg rausgesucht: http://www.openstreetmap.org/browse/way/44169101

In der DB gibt es ja ways und line:

hstore-rendering=> select * from planet_osm_hstore_ways where id=44169101;
     id    |        nodes        |                                                                                                                 tags                                                                                                                 | pending
----------+---------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------
  44169101 | {43632326,43632346} | {surface,asphalt,parking:lane:right,inline,parking:lane:left,diagonal,parking:condition:right:residents,S7,parking:condition:right,residents,oneway,yes,name,Konradstraße,motor_vehicle,destination,maxspeed,30,highway,residential} | f
(1 Zeile)

hstore-rendering=> select * from planet_osm_hstore_line where osm_id=44169101;
   osm_id  |                                                                                                                                                     tags                                                                                                                                                      |                                            way
----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------
  44169101 | "name"=>"Konradstraße", "oneway"=>"yes", "highway"=>"residential", "surface"=>"asphalt", "z_order"=>"3", "maxspeed"=>"30", "motor_vehicle"=>"destination", "parking:lane:left"=>"diagonal", "parking:lane:right"=>"inline", "parking:condition:right"=>"residents", "parking:condition:right:residents"=>"S7" | 010200002031BF0D00020000007B14AEC758E630413D0AD7334C74584148E17A541DE6304114AE47A130745841
(1 Zeile)

Erste Frage: worin unterscheiden die sich inhaltlich? Ich vermute: in ways sind alle
Straßen drin, in line auch z.B. Zäune, Klippen usw. Ist diese Annahme korrekt?

Zweite Frage: schaut euch mal das Feld tags an. Sowohl in ways als auch in line
ist das ja jeweils eine "Liste" von allen Tags. Aber sie sehen unterschiedlich aus.
Warum? Und wie sieht die Zugriffsyntax in sql jeweils aus?

Dritte Frage: Wie greife ich in osm.xml jeweils auf die Felder zu, wenn ich es vorher so
gemacht hatte:

         (select way,"parking:lane:left","parking:condition:left"
           from planet_osm_line
           where "parking:lane:left" in ('diagonal','orthogonal','inline','no_parking','no_stopping','fire_lane')
           order by z_order
         ) as roads

In einem der beiden Fälle (line) müsste es ungefähr so gehen:

         (select way,(tags->'parking:lane:left'),(tags->'parking:condition:left')
           from &prefix;_line
           where (tags ? 'parking:lane:left') AND (tags ? 'parking:condition:left') AND (tags->'parking:lane:left') in ('diagonal','orthogonal','inline','no_parking','no_stopping','fire_lane')
         ) as roads

Wo kann ich ein recht vollständiges Beispiel finden?

Danke,
Kay