]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 10 Apr 2014 21:05:23 +0000 (23:05 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 10 Apr 2014 21:05:23 +0000 (23:05 +0200)
Conflicts:
sql/functions.sql

1  2 
sql/functions.sql

diff --combined sql/functions.sql
index 541754447495ceacf84119deada7d6ad0eddbc86,3c3a01ccb320a0513239b087a8d58ce7e4bebe9e..f6b221f9f76a9f8fb4adc18c1fb439cb68e179a3
@@@ -582,10 -582,9 +582,9 @@@ END
  $$
  LANGUAGE plpgsql IMMUTABLE;
  
- CREATE OR REPLACE FUNCTION get_partition(place geometry, in_country_code VARCHAR(10)) RETURNS INTEGER
+ CREATE OR REPLACE FUNCTION get_partition(in_country_code VARCHAR(10)) RETURNS INTEGER
    AS $$
  DECLARE
-   place_centre GEOMETRY;
    nearcountry RECORD;
  BEGIN
    FOR nearcountry IN select partition from country_name where country_code = in_country_code
@@@ -923,11 -922,6 +922,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;
  
    NEW.calculated_country_code := lower(get_country_code(NEW.geometry));
  
-   NEW.partition := get_partition(NEW.geometry, NEW.calculated_country_code);
+   NEW.partition := get_partition(NEW.calculated_country_code);
    NEW.geometry_sector := geometry_sector(NEW.partition, NEW.geometry);
  
    -- copy 'name' to or from the default language (if there is a default language)
        ELSEIF NEW.type in ('village','hamlet','municipality','district','unincorporated_area','borough') THEN
          NEW.rank_search := 19;
          NEW.rank_address := 16;
-       ELSEIF NEW.type in ('airport') AND ST_GeometryType(NEW.geometry) in ('ST_Polygon','ST_MultiPolygon') THEN
-         NEW.rank_search := 18;
-         NEW.rank_address := 17;
-       ELSEIF NEW.type in ('moor') AND ST_GeometryType(NEW.geometry) in ('ST_Polygon','ST_MultiPolygon') THEN
-         NEW.rank_search := 17;
-         NEW.rank_address := 18;
-       ELSEIF NEW.type in ('moor') THEN
-         NEW.rank_search := 17;
-         NEW.rank_address := 0;
-       ELSEIF NEW.type in ('national_park') THEN
-         NEW.rank_search := 18;
-         NEW.rank_address := 18;
        ELSEIF NEW.type in ('suburb','croft','subdivision','isolated_dwelling') THEN
          NEW.rank_search := 20;
          NEW.rank_address := NEW.rank_search;
          IF (NEW.extratags -> 'locality') = 'townland' THEN
            NEW.rank_address := 20;
          END IF;
-       ELSEIF NEW.type in ('hall_of_residence','neighbourhood','housing_estate','nature_reserve') THEN
+       ELSEIF NEW.type in ('neighbourhood') THEN
          NEW.rank_search := 22;
          NEW.rank_address := 22;
-       ELSEIF NEW.type in ('airport','street') THEN
-         NEW.rank_search := 26;
-         NEW.rank_address := NEW.rank_search;
        ELSEIF NEW.type in ('house','building') THEN
          NEW.rank_search := 30;
          NEW.rank_address := NEW.rank_search;
@@@ -1352,20 -1331,21 +1336,21 @@@ BEGI
        -- for countries, believe the mapped country code,
        -- so that we remain in the right partition if the boundaries
        -- suddenly expand.
-       NEW.partition := get_partition(place_centroid, lower(NEW.country_code));
+       NEW.partition := get_partition(lower(NEW.country_code));
        IF NEW.partition = 0 THEN
          NEW.calculated_country_code := lower(get_country_code(place_centroid));
-         NEW.partition := get_partition(place_centroid, NEW.calculated_country_code);
+         NEW.partition := get_partition(NEW.calculated_country_code);
        ELSE
          NEW.calculated_country_code := lower(NEW.country_code);
        END IF;
      ELSE
        IF NEW.rank_search > 4 THEN
+         --NEW.calculated_country_code := lower(get_country_code(NEW.geometry, NEW.country_code));
          NEW.calculated_country_code := lower(get_country_code(place_centroid));
        ELSE
          NEW.calculated_country_code := NULL;
        END IF;
-       NEW.partition := get_partition(place_centroid, NEW.calculated_country_code);
+       NEW.partition := get_partition(NEW.calculated_country_code);
      END IF;
      NEW.geometry_sector := geometry_sector(NEW.partition, place_centroid);
  
@@@ -2046,11 -2026,6 +2031,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;
  
    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, '')
@@@ -2832,7 -2801,7 +2817,7 @@@ DECLAR
  BEGIN
  
    place_centroid := ST_Centroid(pointgeo);
-   out_partition := get_partition(place_centroid, in_countrycode);
+   out_partition := get_partition(in_countrycode);
    out_parent_place_id := null;
  
    address_street_word_id := get_name_id(make_standard_name(in_street));