x

IMPOSM mapping mit zwei oder mehr Feldern


  1. IMPOSM mapping mit zwei oder mehr Feldern · tds4u (Gast) · 26.07.2013 18:39 · [flux]

    Hallo,
    wir sind nun von osm2pgsql auf Imposm gewechselt. Klappt auch alels ganz gut. Nur möchten wir unsere Karten wenigsten auf den Stand bringen den wir vorher hatten. Dazu war die Ausgangslage https://github.com/mapserver/basemaps. Nun gibt es aber z.B. Straßen wo highway=construction und construction=('motorway','motorway_link','trunk','trunk_link','primary','primary_link','secondary','secondary_link','tertiary','tertiary_link','road','path','track','service','footway','bridleway','cycleway','steps','pedestrian','living_street','unclassified','residential') sein kann. Nur wie kann ich das mappen?

    Beispiel ist ein Kreisverkehr in Lübben/Spreewald welcher umgebaut wird und nun "nicht vorhanden" ist (Coords ca. 1546684.76778 : 6789196.85383 in EPSG:900913)

    1. Gedanke:

    mapping␣=␣{
    'highway':␣(
    [alle␣bekannten␣Highway-Typen],
    'construction'
    ),
    'fields':␣(
    ('construction',␣String())
    )
    }
    

    Soweit so gut, nur sollte das Feld construction vom Typ bool sein und Highway dann den Wert von construction annehmen. Geht das denn überhaupt?
    Beim osm2pgsql-to-imposm-schema.sql habe ich das so gelöst:

    CREATE␣VIEW␣osm_new_mainroads_view␣AS
    SELECT␣row_number()␣OVER␣(ORDER␣BY␣osm_id)␣id,␣*␣FROM␣(
    SELECT␣osm_id,␣name,␣highway␣as␣type,
    CASE
    WHEN␣highway='construction'␣THEN␣1
    ELSE␣0
    END␣construction,
    CASE
    WHEN␣tunnel='yes'␣THEN␣1
    ELSE␣0
    END␣tunnel,
    CASE
    WHEN␣bridge='yes'␣THEN␣1
    ELSE␣0
    END␣bridge,
    CASE
    WHEN␣oneway='yes'␣THEN␣1
    ELSE␣0
    END␣oneway,ref,z_order,way␣as␣geometry
    FROM␣osm_line␣WHERE␣highway␣IN␣('primary',
    'primary_link',
    'secondary',
    'secondary_link',
    'tertiary')
    OR␣(highway='construction'␣AND␣construction␣IN␣('primary',
    'primary_link',
    'secondary',
    'secondary_link',
    'tertiary'))
    )␣as␣foo;
    

    Wer kann mir evtl. helfen?


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · wambacher (Gast) · 26.07.2013 19:10 · [flux]

      tds4u wrote:

      Wer kann mir evtl. helfen?

      Hi,

      erst einmal herzlich willkommen im Forum!

      Leider kann ich persönlich nicht helfen, da ich andere Sachen mit OSM mache 🙁

      Allerdings hab ich mir eure ansonsten toll gerenderte Business-Karte mal näher angesehen und dort jeglichen Hinweis auf OSM vermißt. Habe ich da was übersehen?
      Falls nein: Bitte beachtet unbedingt folgende Infos: Urheberrecht und Lizenz - spätestens wenn ihr mit dem Teil Live geht.

      Gruss
      walter

      P.s. nur für den Fall, dass ihr komplett von Google weg wollt: Bing bietet auch Sat-Bilder an: http://osm.wno-edv-service.de/residenti … =00BFFTFTF


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · tds4u (Gast) · 26.07.2013 20:02 · [flux]

      wambacher wrote:

      Allerdings hab ich mir eure ansonsten toll gerenderte Business-Karte mal näher angesehen und dort jeglichen Hinweis auf OSM vermißt. Habe ich da was übersehen?

      Luftbild-Aufnahmen benötigen wir nicht. Und wenn die Karten eingesetzt werden gibt es ein separates Copyright unterhalb der eingebundenen Variante.
      Beispiel:

      Mit freundlicher Unterstützung von Openlayers und OpenStreetMap 2013.
      Geodaten © OpenStreetMap und Mitwirkende, Open Data Commons Open Database License (ODbL).

      Die URL ist so nur für Testzwecke als Test für OSM in Kombination mit Mapserver und OpenLayers gedacht.


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · streckenkundler (Gast) · 26.07.2013 20:08 · [flux]

      Hallo,

      tds4u wrote:

      Kreisverkehr in Lübben/Spreewald welcher umgebaut wird und nun "nicht vorhanden" ist (Coords ca. 1546684.76778 : 6789196.85383 in EPSG:900913)

      zum eigentlichen Thema kann ich zwar nichts sagen, aber Schätzungsweise erste Augustwoche ist besagter Kreisverkehr soweit, daß ich das highway=construction rausnehme (wenn die Vollsperrung aufgehoben ist), Auch wenn sich die gesamten Bauarbeiten noch bis September hinziehen werden. Derzeit ist er von Westen (Lindenstraße) gar nicht zu befahren. von der Straße "Am Spreeufer" über (Rest der) Lindenstraße zum Ernst-von-Houwald-Damm ist noch Ampelregelung.

      lokaler Kenner...

      Sven


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · tds4u (Gast) · 26.07.2013 20:26 · [flux]

      Hallo Sven,
      das löst ja das eigentliche Problem nicht 🤔
      Kenne noch ein paar Baustellen in der Gegend (z.B. Bundestraße bei Luckenwalde oder die B169). Ist aber auch teilweise bei Autobahnen so (Thüringen).
      Bei einem manuellem SQL-Mapping via osm2pgsql und SQL-File geht das einfacher, bei IMPOSM wohl nicht 🙁


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · streckenkundler (Gast) · 26.07.2013 20:32 · [flux]

      tds4u wrote:

      das löst ja das eigentliche Problem nicht hmm

      ich weiß...

      Rendering- und Routing-Geschishichten sind nicht so mein Bereich. Ich erfasse lieber und hab ein besonderes Auge auf meine Heimat (auch wenn es auch da noch dehr viel zu erfassen gibt.

      Sven


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · wambacher (Gast) · 26.07.2013 21:06 · [flux]

      tds4u wrote:

      wambacher wrote:

      Allerdings hab ich mir eure ansonsten toll gerenderte Business-Karte mal näher angesehen und dort jeglichen Hinweis auf OSM vermißt. Habe ich da was übersehen?

      Luftbild-Aufnahmen benötigen wir nicht. Und wenn die Karten eingesetzt werden gibt es ein separates Copyright unterhalb der eingebundenen Variante.

      Hatte ich ja schon vermutet, dass da noch was kommen müsste. 😉

      Ich hab nur auf Bing hingewiesen, weil ihr in der Test-Karte das entsprechende Layer von Google drin habt.

      Gruss
      walter


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · Balgofil (Gast) · 26.07.2013 21:54 · [flux]

      Wie wäre es hiermit (Warnung! ich habe es nicht getestet, sondern nur die Beschreibung und das Beispiel angeguckt):

      way_constr␣=␣LineStrings(
      with_type_field␣=␣False,
      name␣=␣"constructions",
      field_filter␣=␣(
      ('highway'␣,␣'construction')
      ),
      mapping␣=␣{
      'construction'␣:␣(
      '__any__',)
      },
      filter␣=␣(
      ('construction',True),
      ('highway',Type()),
      ),
      )
      

      Das würde ich jedenfalls versuchen. Wenn ich imposm richtig verstanden habe, braucht man das construction True aber nicht, da er eine seperate Tabelle mit Namen constructions anlegt. Ich kann auch nicht sagen ob der field_filter highway mit dem filter highway kollidiert. Zur Not beim filter in road_class umbenennen


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · tds4u (Gast) · 27.07.2013 17:43 · [flux]

      Funktioniert leider nicht.

      ('highway', Type(), ),
      NameError: name 'Type' is not defined

      Geht auch nicht mit "Type(),)" 🤔

      In anderen Foren lese ich das es mit einer Custom Class gehen soll. Nur dann steht weiter: to practice 😬


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · Balgofil (Gast) · 27.07.2013 18:47 · [flux]

      Welche imposm Version benutzt ihr denn? Type soll es ja erst ab Version 2.4 geben. Eine andere Möglichkeit wäre, dass ihr bei

      from␣imposm.mapping␣import␣...
      

      Type vergessen habt.


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · tds4u (Gast) · 27.07.2013 21:46 · [flux]

      Klappt auch nicht. Haben v2.40. Type habe ich oben eingefügt.

      Hier der aktuelle Code:

      #␣Copyright␣2011␣Omniscale␣(http://omniscale.com)
      #
      #␣Licensed␣under␣the␣Apache␣License,␣Version␣2.0␣(the␣"License");
      #␣you␣may␣not␣use␣this␣file␣except␣in␣compliance␣with␣the␣License.
      #␣You␣may␣obtain␣a␣copy␣of␣the␣License␣at
      #
      #␣␣␣␣␣http://www.apache.org/licenses/LICENSE-2.0
      #
      #␣Unless␣required␣by␣applicable␣law␣or␣agreed␣to␣in␣writing,␣software
      #␣distributed␣under␣the␣License␣is␣distributed␣on␣an␣"AS␣IS"␣BASIS,
      #␣WITHOUT␣WARRANTIES␣OR␣CONDITIONS␣OF␣ANY␣KIND,␣either␣express␣or␣implied.
      #␣See␣the␣License␣for␣the␣specific␣language␣governing␣permissions␣and
      #␣limitations␣under␣the␣License.
      
      from␣imposm.mapping␣import␣(
      Options,␣Type,
      Points,␣LineStrings,␣Polygons,
      String,␣Bool,␣Integer,␣OneOfInt,
      set_default_name_type,␣LocalizedName,
      WayZOrder,␣ZOrder,␣Direction,
      GeneralizedTable,␣UnionView,
      PseudoArea,␣meter_to_mapunit,␣sqr_meter_to_mapunit,
      )
      
      #␣#␣internal␣configuration␣options
      #␣#␣uncomment␣to␣make␣changes␣to␣the␣default␣values
      import␣imposm.config
      #
      #␣#␣import␣relations␣with␣missing␣rings
      imposm.config.import_partial_relations␣=␣False
      #
      #␣#␣select␣relation␣builder:␣union␣or␣contains
      imposm.config.relation_builder␣=␣'contains'
      #
      #␣#␣log␣relation␣that␣take␣longer␣than␣x␣seconds
      #␣imposm.config.imposm_multipolygon_report␣=␣60
      #
      #␣#␣skip␣relations␣with␣more␣rings␣(0␣skip␣nothing)
      #␣imposm.config.imposm_multipolygon_max_ring␣=␣0
      #
      #␣#␣split␣ways␣that␣are␣longer␣than␣x␣nodes␣(0␣to␣split␣nothing)
      #␣imposm_linestring_max_length␣=␣50
      
      #␣#␣You␣can␣prefer␣a␣language␣other␣than␣the␣data's␣local␣language
      #␣set_default_name_type(LocalizedName(['name:en',␣'int_name',␣'name']))
      
      db_conf␣=␣Options(
      #␣db='osm',
      host='localhost',
      port=5432,
      user='osm',
      password='osm',
      sslmode='allow',
      prefix='osm_new_',
      proj='epsg:3857',
      )
      
      class␣Highway(LineStrings):
      fields␣=␣(
      ('tunnel',␣Bool()),
      ('bridge',␣Bool()),
      ('oneway',␣Direction()),
      ('ref',␣String()),
      ('layer',␣Integer()),
      ('z_order',␣WayZOrder()),
      ('access',␣String()),
      )
      field_filter␣=␣(
      ('area',␣Bool()),
      )
      
      places␣=␣Points(
      name␣=␣'places',
      mapping␣=␣{
      'place':␣(
      'country',
      'state',
      'region',
      'county',
      'city',
      'town',
      'village',
      'hamlet',
      'suburb',
      'neighbourhood',
      'locality',
      ),
      },
      fields␣=␣(
      ('z_order',␣ZOrder([
      'country',
      'state',
      'region',
      'county',
      'city',
      'town',
      'village',
      'hamlet',
      'suburb',
      'neighbourhood',
      'locality',
      ])),
      ('population',␣Integer()),
      ),
      )
      
      admin␣=␣Polygons(
      name␣=␣'admin',
      mapping␣=␣{
      'boundary':␣(
      'administrative',
      ),
      },
      fields␣=␣(
      ('admin_level',␣OneOfInt('1␣2␣3␣4␣5␣6'.split())),
      ),
      )
      
      roads␣=␣Highway(
      name␣=␣'roads',
      mapping␣=␣{
      'highway':␣(
      'motorway',
      'motorway_link',
      'trunk',
      'trunk_link',
      'primary',
      'primary_link',
      'secondary',
      'secondary_link',
      'tertiary',
      'tertiary_link',
      'road',
      'path',
      'track',
      'service',
      'footway',
      'bridleway',
      'cycleway',
      'steps',
      'pedestrian',
      'living_street',
      'unclassified',
      'residential',
      #			'construction',
      ),
      }
      )
      
      roads_construction␣=␣LineStrings(
      with_type_field␣=␣False,
      name␣=␣'constructions',
      field_filter␣=␣(
      ('highway',␣'construction')
      ),
      mapping␣=␣{
      'construction'␣:␣(
      '__any__',
      )
      },
      fields␣=␣(
      ('construction',␣True),
      ('highway',␣Type()),
      ),
      )
      
      buildings␣=␣Polygons(
      name␣=␣'buildings',
      fields␣=␣(
      ('area',␣PseudoArea()),
      ),
      mapping␣=␣{
      'building':␣(
      '__any__',
      ),
      'railway':␣(
      'station',
      ),
      'aeroway':␣(
      'terminal',
      ),
      }
      )
      
      transport_points␣=␣Points(
      name␣=␣'transport_points',
      fields␣=␣(
      ('ref',␣String()),
      ),
      mapping␣=␣{
      'highway':␣(
      'motorway_junction',
      'turning_circle',
      'bus_stop',
      ),
      'railway':␣(
      'station',
      'halt',
      'tram_stop',
      'crossing',
      'level_crossing',
      'subway_entrance',
      ),
      'aeroway':␣(
      'aerodrome',
      'terminal',
      'helipad',
      'gate',
      )}
      )
      
      railways␣=␣LineStrings(
      name␣=␣'railways',
      fields␣=␣(
      ('tunnel',␣Bool()),
      ('bridge',␣Bool()),
      #␣('ref',␣String()),
      ('layer',␣Integer()),
      ('z_order',␣WayZOrder()),
      ('access',␣String()),
      ),
      mapping␣=␣{
      'railway':␣(
      'rail',
      'tram',
      'light_rail',
      'subway',
      'narrow_gauge',
      'preserved',
      'funicular',
      'monorail',
      #			'construction',
      )}
      )
      
      waterways␣=␣LineStrings(
      name␣=␣'waterways',
      mapping␣=␣{
      'barrier':␣(
      'ditch',
      ),
      'waterway':␣(
      'stream',
      'river',
      'canal',
      'drain',
      'ditch',
      ),
      },
      field_filter␣=␣(
      ('tunnel',␣Bool()),
      ),
      )
      
      waterareas␣=␣Polygons(
      name␣=␣'waterareas',
      fields␣=␣(
      ('area',␣PseudoArea()),
      ),
      mapping␣=␣{
      'waterway':␣('riverbank',),
      'natural':␣('water',),
      'landuse':␣('basin',␣'reservoir'),
      },
      )
      
      barrierpoints␣=␣Points(
      name␣=␣'barrierpoints',
      mapping␣=␣{
      'barrier':␣(
      'block',
      'bollard',
      'cattle_grid',
      'chain',
      'cycle_barrier',
      'entrance',
      'horse_stile',
      'gate',
      'spikes',
      'lift_gate',
      'kissing_gate',
      'fence',
      'yes',
      'wire_fence',
      'toll_booth',
      'stile',
      )}
      )
      barrierways␣=␣LineStrings(
      name␣=␣'barrierways',
      mapping␣=␣{
      'barrier':␣(
      'city_wall',
      'fence',
      'hedge',
      'retaining_wall',
      'wall',
      'bollard',
      'gate',
      'spikes',
      'lift_gate',
      'kissing_gate',
      'embankment',
      'yes',
      'wire_fence',
      )}
      )
      
      aeroways␣=␣LineStrings(
      name␣=␣'aeroways',
      mapping␣=␣{
      'aeroway':␣(
      'runway',
      'taxiway',
      )}
      )
      
      transport_areas␣=␣Polygons(
      name␣=␣'transport_areas',
      mapping␣=␣{
      'railway':␣(
      'station',
      ),
      'aeroway':␣(
      'aerodrome',
      'terminal',
      'helipad',
      'apron',
      ),
      })
      
      landusages␣=␣Polygons(
      name␣=␣'landusages',
      fields␣=␣(
      ('area',␣PseudoArea()),
      ('z_order',␣ZOrder([
      'pedestrian',
      'footway',
      'aerodrome',
      'helipad',
      'apron',
      'playground',
      'park',
      'forest',
      'cemetery',
      'farmyard',
      'farm',
      'farmland',
      'wood',
      'meadow',
      'grass',
      'wetland',
      'village_green',
      'recreation_ground',
      'garden',
      'sports_centre',
      'pitch',
      'common',
      'allotments',
      'golf_course',
      'university',
      'school',
      'college',
      'library',
      'fuel',
      'parking',
      'nature_reserve',
      'cinema',
      'theatre',
      'place_of_worship',
      'hospital',
      'scrub',
      'zoo',
      'quarry',
      'residential',
      'retail',
      'commercial',
      'industrial',
      'railway',
      'island',
      'land',
      ])),
      ),
      mapping␣=␣{
      'landuse':␣(
      'park',
      'forest',
      'residential',
      'retail',
      'commercial',
      'industrial',
      'railway',
      'cemetery',
      'grass',
      'farmyard',
      'farm',
      'farmland',
      'wood',
      'meadow',
      'village_green',
      'recreation_ground',
      'allotments',
      'quarry',
      ),
      'leisure':␣(
      'park',
      'garden',
      'playground',
      'golf_course',
      'sports_centre',
      'pitch',
      'stadium',
      'common',
      'nature_reserve',
      ),
      'natural':␣(
      'wood',
      'land',
      'scrub',
      'wetland',
      ),
      'highway':␣(
      'pedestrian',
      'footway',
      ),
      'amenity':␣(
      'university',
      'school',
      'college',
      'library',
      'fuel',
      'parking',
      'cinema',
      'theatre',
      'place_of_worship',
      'hospital',
      ),
      'place':␣(
      'island',
      ),
      'tourism':␣(
      'zoo',
      ),
      'aeroway':␣(
      'aerodrome',
      'helipad',
      'apron',
      ),
      })
      
      amenities␣=␣Points(
      name='amenities',
      mapping␣=␣{
      'amenity':␣(
      'university',
      'school',
      'library',
      'fuel',
      'hospital',
      'fire_station',
      'police',
      'townhall',
      ),
      })
      
      roads_gen1␣=␣GeneralizedTable(
      name␣=␣'roads_gen1',
      tolerance␣=␣meter_to_mapunit(50.0),
      origin␣=␣roads,
      where␣=␣"type␣in␣('motorway','trunk','primary','secondary','tertiary')",
      )
      roads_gen0␣=␣GeneralizedTable(
      name␣=␣'roads_gen0',
      tolerance␣=␣meter_to_mapunit(200.0),
      origin␣=␣roads_gen1,
      where␣=␣"type␣in␣('motorway','trunk','primary')",
      )
      
      railways_gen1␣=␣GeneralizedTable(
      name␣=␣'railways_gen1',
      tolerance␣=␣meter_to_mapunit(50.0),
      origin␣=␣railways,
      )
      railways_gen0␣=␣GeneralizedTable(
      name␣=␣'railways_gen0',
      tolerance␣=␣meter_to_mapunit(200.0),
      origin␣=␣railways_gen1,
      )
      
      landusages_gen00␣=␣GeneralizedTable(
      name␣=␣'landusages_gen00',
      tolerance␣=␣meter_to_mapunit(500.0),
      origin␣=␣landusages,
      where␣=␣"ST_Area(geometry)>%f"␣%␣sqr_meter_to_mapunit(10000000),
      )
      
      landusages_gen0␣=␣GeneralizedTable(
      name␣=␣'landusages_gen0',
      tolerance␣=␣meter_to_mapunit(200.0),
      origin␣=␣landusages,
      where␣=␣"ST_Area(geometry)>%f"␣%␣sqr_meter_to_mapunit(5000000),
      )
      
      landusages_gen1␣=␣GeneralizedTable(
      name␣=␣'landusages_gen1',
      tolerance␣=␣meter_to_mapunit(50.0),
      origin␣=␣landusages,
      where␣=␣"ST_Area(geometry)>%f"␣%␣sqr_meter_to_mapunit(50000),
      )
      
      waterways_gen0␣=␣GeneralizedTable(
      name␣=␣'waterways_gen0',
      tolerance␣=␣meter_to_mapunit(200.0),
      origin␣=␣waterways,
      where␣=␣"type='river'",
      )
      
      waterways_gen1␣=␣GeneralizedTable(
      name␣=␣'waterways_gen1',
      tolerance␣=␣meter_to_mapunit(50.0),
      origin␣=␣waterways,
      )
      
      waterareas_gen0␣=␣GeneralizedTable(
      name␣=␣'waterareas_gen0',
      tolerance␣=␣meter_to_mapunit(200.0),
      origin␣=␣waterareas,
      where␣=␣"ST_Area(geometry)>%f"␣%␣sqr_meter_to_mapunit(500000),
      )
      
      waterareas_gen1␣=␣GeneralizedTable(
      name␣=␣'waterareas_gen1',
      tolerance␣=␣meter_to_mapunit(50.0),
      origin␣=␣waterareas,
      where␣=␣"ST_Area(geometry)>%f"␣%␣sqr_meter_to_mapunit(50000),
      )
      

      Es soll ja "nur" wenn construction != NULL dann highway='construction', construction=true gesetzt werden.
      Der Omniscale-Code ist von 2011 (siehe oben). Gibt es da etwas Neueres was so etwas beinhaltet was gewünscht wird?

      MfG


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · Balgofil (Gast) · 28.07.2013 12:41 · [flux]

      tds4u wrote:

      Klappt auch nicht.

      Das ist jetzt aber keine sehr explizite Fehlermeldung.

      Kannst du mal bei mapping construction, True raus nehmen? Und dann nur diese Tabelle erstellen ohne irgendwelche anderen Mappings.
      Ansonsten kannst du auch auf deren Mailinglist nachfragen.


    • Re: IMPOSM mapping mit zwei oder mehr Feldern · amm (Gast) · 28.07.2013 15:15 · [flux]

      tds4u wrote:

      Soweit so gut, nur sollte das Feld construction vom Typ bool sein und Highway dann den Wert von construction annehmen. Geht das denn überhaupt?

      In osm2pgsql kann man das inzwischen recht leicht machen. Es gibt seit kurzem (etwa zwei Monaten) die Moeglichkeit per lua script beliebige Umschreibungen der Tags vor zu nehmen, befor die Daten in die Datenbank geschrieben werden. Dort kann man dann z.B. alle construction Tags in entweder true oder false umschreiben und den highway Wert durch die Werte von construction ueberschreiben.

      Die default Umschreibung kann man unter https://github.com/openstreetmap/osm2pg … /style.lua einsehen und daraus dann an seine eigenen Beduerfnisse anpassen.