From e44918322598fa3cc8c3631030a1f0fc282553bd Mon Sep 17 00:00:00 2001 From: Oliver Tonnhofer Date: Mon, 13 Jan 2014 08:52:15 +0100 Subject: [PATCH] only skip import of polygons if way was inserted as multipolygon --- test/imposm_system_test.py | 26 ++++++++++++++++++ test/test.osm | 56 ++++++++++++++++++++++++++++++++++++++ writer/ways.go | 10 +++---- 3 files changed, 86 insertions(+), 6 deletions(-) diff --git a/test/imposm_system_test.py b/test/imposm_system_test.py index 2c74476..80a09ce 100644 --- a/test/imposm_system_test.py +++ b/test/imposm_system_test.py @@ -322,6 +322,32 @@ def test_relation_way_not_inserted(): scrub = query_row(db_conf, 'osm_landusages', 9110) assert scrub['type'] == 'scrub' +def test_relation_ways_inserted(): + """Outer ways of multipolygon are inserted. """ + park = query_row(db_conf, 'osm_landusages', -9201) + assert park['type'] == 'park' + assert park['name'] == '9209' + + # outer ways of multipolygon stand for their own + road = query_row(db_conf, 'osm_roads', 9209) + assert road['type'] == 'secondary' + assert road['name'] == '9209' + road = query_row(db_conf, 'osm_roads', 9210) + assert road['type'] == 'residential' + assert road['name'] == '9210' + + park = query_row(db_conf, 'osm_landusages', -9301) + assert park['type'] == 'park' + assert park['name'] == '' # no name on relation + + # outer ways of multipolygon stand for their own + road = query_row(db_conf, 'osm_roads', 9309) + assert road['type'] == 'secondary' + assert road['name'] == '9309' + road = query_row(db_conf, 'osm_roads', 9310) + assert road['type'] == 'residential' + assert road['name'] == '9310' + def test_relation_way_inserted(): """Part of relation was inserted twice.""" park = query_row(db_conf, 'osm_landusages', -8001) diff --git a/test/test.osm b/test/test.osm index 5ae1a03..63f4e2f 100644 --- a/test/test.osm +++ b/test/test.osm @@ -406,6 +406,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/writer/ways.go b/writer/ways.go index a62979d..c75a446 100644 --- a/writer/ways.go +++ b/writer/ways.go @@ -44,14 +44,11 @@ func (ww *WayWriter) loop() { if len(w.Tags) == 0 { continue } - inserted, err := ww.osmCache.InsertedWays.IsInserted(w.Id) + insertedAsRelation, err := ww.osmCache.InsertedWays.IsInserted(w.Id) if err != nil { log.Warn(err) continue } - if inserted { - continue - } err = ww.osmCache.Coords.FillWay(w) if err != nil { @@ -59,12 +56,13 @@ func (ww *WayWriter) loop() { } proj.NodesToMerc(w.Nodes) - inserted = false + inserted := false if ok, matches := ww.inserter.ProbeLineString(w.OSMElem); ok { ww.buildAndInsert(geos, w, matches, false) inserted = true } - if w.IsClosed() { + if w.IsClosed() && !insertedAsRelation { + // only add polygons that were not inserted as a MultiPolygon relation if ok, matches := ww.inserter.ProbePolygon(w.OSMElem); ok { ww.buildAndInsert(geos, w, matches, true) inserted = true