]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Wed, 7 May 2014 20:33:21 +0000 (22:33 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 7 May 2014 20:33:21 +0000 (22:33 +0200)
1  2 
sql/functions.sql

diff --combined sql/functions.sql
index 976c73f22bdc912851a435cbeb3c8e188b2f6e64,820236718cf480ed7a5f38de014b441f19b8edc0..9cf1bd40a690ca77d9983b19eea0bbf53a9196ee
@@@ -936,11 -936,6 +936,11 @@@ DECLAR
  BEGIN
    --DEBUG: RAISE WARNING '% %',NEW.osm_type,NEW.osm_id;
  
 +  -- remove operator tag for most places, messes too much with search_name indexes
 +  IF NEW.class not in ('amenity', 'shop') THEN
 +    NEW.name := delete(NEW.name, 'operator');
 +  END IF;
 +
    -- just block these
    IF NEW.class in ('landuse','natural') and NEW.name is null THEN
  --    RAISE WARNING 'empty landuse %',NEW.osm_id;
      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;
@@@ -1371,6 -1370,22 +1375,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;
  
@@@ -2047,11 -2059,6 +2064,11 @@@ BEGI
      --DEBUG: RAISE WARNING '%', existingplacex;
    END IF;
  
 +  -- remove operator tag for most places, messes too much with search_name indexes
 +  IF NEW.class not in ('amenity', 'shop') THEN
 +    NEW.name := delete(NEW.name, 'operator');
 +  END IF;
 +
    -- Just block these - lots and pointless
    IF NEW.class in ('landuse','natural') and NEW.name is null THEN
      -- if the name tag was removed, older versions might still be lurking in the place table
  
    END IF;
  
 +  -- refuse to update multiplpoygons with too many objects, too much of a performance hit
 +  IF ST_NumGeometries(NEW.geometry) > 2000 THEN
 +    RAISE WARNING 'Dropping update of % % because of geometry complexity.', NEW.osm_type, NEW.osm_id;
 +    RETURN NULL;
 +  END IF;
 +
    IF coalesce(existing.name::text, '') != coalesce(NEW.name::text, '')
       OR coalesce(existing.extratags::text, '') != coalesce(NEW.extratags::text, '')
       OR coalesce(existing.housenumber, '') != coalesce(NEW.housenumber, '')