END IF;
IF NEW.rank_address = 0 THEN
- max_rank := geometry_to_rank(NEW.rank_search, NEW.geometry);
+ max_rank := geometry_to_rank(NEW.rank_search, NEW.geometry, NEW.country_code);
ELSEIF NEW.rank_address > 25 THEN
max_rank := 25;
ELSE
-- This is all simple guess work. We don't need particularly good estimates
-- here. This just avoids to have very high ranked address parts in features
-- that span very large areas (or vice versa).
-CREATE OR REPLACE FUNCTION geometry_to_rank(search_rank SMALLINT, geometry GEOMETRY)
+CREATE OR REPLACE FUNCTION geometry_to_rank(search_rank SMALLINT, geometry GEOMETRY, country_code TEXT)
RETURNS SMALLINT
AS $$
DECLARE
RETURN search_rank;
END IF;
+ -- adjust for the fact that countries come in different sizes
+ IF country_code IN ('ca', 'au', 'ru') THEN
+ area := area / 5;
+ ELSIF country_code IN ('br', 'kz', 'cn', 'us', 'ne', 'gb', 'za', 'sa', 'id', 'eh', 'ml', 'tm') THEN
+ area := area / 3;
+ ELSIF country_code IN ('bo', 'ar', 'sd', 'mn', 'in', 'et', 'cd', 'mz', 'ly', 'cl', 'zm') THEN
+ area := area / 2;
+ END IF;
+
IF area > 1 THEN
RETURN 7;
ELSIF area > 0.1 THEN