From: Sarah Hoffmann Date: Thu, 10 Apr 2014 21:05:23 +0000 (+0200) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~544 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/671c08848c1531f0c52f0dfff9448086a6fc09cb?hp=-c Merge remote-tracking branch 'upstream/master' Conflicts: sql/functions.sql --- 671c08848c1531f0c52f0dfff9448086a6fc09cb diff --combined sql/functions.sql index 54175444,3c3a01cc..f6b221f9 --- a/sql/functions.sql +++ b/sql/functions.sql @@@ -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; @@@ -958,7 -952,7 +957,7 @@@ 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) @@@ -1069,18 -1063,6 +1068,6 @@@ 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; @@@ -1091,12 -1073,9 +1078,9 @@@ 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 @@@ -2240,12 -2215,6 +2225,12 @@@ 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));