]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge branch 'place-in-addressdetails' of https://github.com/lonvia/Nominatim
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 16 May 2014 09:23:05 +0000 (11:23 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 16 May 2014 09:23:05 +0000 (11:23 +0200)
1  2 
sql/functions.sql

diff --combined sql/functions.sql
index 820236718cf480ed7a5f38de014b441f19b8edc0,c2268f4379f302890ac7a9ac9912fdb1a8f3fe59..1da469208d29910001ca04f9351c771232590519
@@@ -1136,11 -1136,7 +1136,11 @@@ BEGI
      ELSEIF NEW.class = 'waterway' AND NEW.name is NULL THEN
        RETURN NULL;
      ELSEIF NEW.class = 'waterway' THEN
 -      NEW.rank_search := 17;
 +      IF NEW.osm_type = 'R' THEN
 +        NEW.rank_search := 16;
 +      ELSE
 +        NEW.rank_search := 17;
 +      END IF;
        NEW.rank_address := 0;
      ELSEIF NEW.class = 'highway' AND NEW.osm_type != 'N' AND NEW.type in ('service','cycleway','path','footway','steps','bridleway','motorway_link','primary_link','trunk_link','secondary_link','tertiary_link') THEN
        NEW.rank_search := 27;
@@@ -1370,22 -1366,6 +1370,22 @@@ BEGI
      END IF;
      NEW.geometry_sector := geometry_sector(NEW.partition, place_centroid);
  
 +    -- waterway ways are linked when they are part of a relation and have the same class/type
 +    IF NEW.osm_type = 'R' and NEW.class = 'waterway' THEN
 +        FOR relation IN select * from planet_osm_rels r where r.id = NEW.osm_id
 +        LOOP
 +            FOR i IN relation.way_off+1..relation.rel_off LOOP
 +                IF relation.members[2*i] in ('', 'main_stream') THEN
 +                  --DEBUG: RAISE WARNING 'waterway parent %, child %/%', NEW.osm_id, i, relation.parts[i];
 +                  FOR location IN SELECT * FROM placex WHERE osm_type = 'W' and osm_id = relation.parts[i] and class = NEW.class and type = NEW.type
 +                  LOOP
 +                    UPDATE placex SET linked_place_id = NEW.place_id WHERE place_id = location.place_id;
 +                  END LOOP;
 +                END IF;
 +            END LOOP;
 +        END LOOP;
 +    END IF;
 +
      -- Adding ourselves to the list simplifies address calculations later
      INSERT INTO place_addressline VALUES (NEW.place_id, NEW.place_id, true, true, 0, NEW.rank_address); 
  
            END IF;    
            
            -- If the way contains an explicit name of a street copy it
 -          IF NEW.street IS NULL AND NEW.addr_place IS NULL AND location.street IS NOT NULL THEN
 +          -- Slightly less strict then above because data is copied from any object.
 +          IF NEW.street IS NULL AND NEW.addr_place IS NULL THEN
  --RAISE WARNING 'node in way that has a streetname %',location;
              NEW.street := location.street;
 -          END IF;
 -
 -          -- IF the way contains an explicit name of a place copy it
 -          IF NEW.addr_place IS NULL AND NEW.street IS NULL AND location.addr_place IS NOT NULL THEN
              NEW.addr_place := location.addr_place;
            END IF;
  
@@@ -2518,7 -2501,9 +2518,9 @@@ BEGI
    FOR location IN 
      select placex.place_id, osm_type, osm_id,
        CASE WHEN class = 'place' and type = 'postcode' THEN hstore('name', postcode) ELSE name END as name,
-       class, type, admin_level, fromarea, isaddress,
+       CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class,
+       CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type,
+       admin_level, fromarea, isaddress,
        CASE WHEN address_place_id = for_place_id AND rank_address = 0 THEN 100 WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
        distance,calculated_country_code,postcode
        from place_addressline join placex on (address_place_id = placex.place_id)