]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge pull request #1852 from osm-search/disable-jit-for-updates
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 28 Jun 2020 20:39:44 +0000 (22:39 +0200)
committerGitHub <noreply@github.com>
Sun, 28 Jun 2020 20:39:44 +0000 (22:39 +0200)
Disable Postgresql jit and parallel processing for osm2pgsql updates

settings/address-levels.json
sql/functions/utils.sql
test/bdd/db/import/placex.feature

index 8b25fb1a48da6d3a5ef15d8aff1ba58d1cc82c67..766098dd80c1396fd55c5afe5acfe9b6b6f5f33f 100644 (file)
@@ -2,33 +2,33 @@
 { "tags" : {
       "place" : {
           "sea" : [2, 0],
+          "island" : [17, 0],
+          "islet" : [20, 0],
           "continent" : [2, 0],
           "country" : [4, 0],
           "state" : [8, 0],
           "province" : [8, 0],
           "region" : [18, 0],
           "county" : 12,
-          "municipality" : [17, 14],
+          "municipality" : 14,
           "city" : 16,
-          "island" : [17, 0],
           "town" : [18, 16],
+          "borough" : 18,
           "village" : [19, 16],
           "district" : [19, 16],
-          "borough" : [19, 18],
+          "suburb" : [19, 20],
           "hamlet" : 20,
-          "suburb" : 20,
           "croft" : 20,
           "subdivision" : 20,
-          "isolated_dwelling" : 20,
           "allotments" : 20,
-          "farm" : [20, 0],
-          "locality" : [20, 0],
-          "islet" : [20, 0],
-          "mountain_pass" : [20, 0],
-          "neighbourhood" : 22,
-          "quarter" : 22,
+          "neighbourhood" : [20, 22],
+          "quarter" : [20, 22],
+          "isolated_dwelling" : [22, 20],
           "city_block" : 22,
-          "houses" : [28, 0]
+          "mountain_pass" : [20, 0],
+          "houses" : [28, 0],
+          "farm" : [20, 0],
+          "locality" : [20, 0]
       },
       "boundary" : {
           "administrative2" : 4,
index 61033fb4d3a5db50118f66fa93a6a7378c4f5660..2b3db04a92116b38c4f0504f1372923d313ed897 100644 (file)
@@ -272,6 +272,25 @@ END;
 $$
 LANGUAGE plpgsql;
 
+CREATE OR REPLACE FUNCTION near_feature_rank_distance(rank_search INTEGER)
+  RETURNS FLOAT
+  AS $$
+BEGIN
+  IF rank_search <= 16 THEN -- city
+    RETURN 7500;
+  ELSIF rank_search <= 18 THEN -- town
+    RETURN 4000;
+  ELSIF rank_search <= 19 THEN -- village
+    RETURN 2000;
+  ELSIF rank_search  <= 20 THEN -- hamlet
+    RETURN 1000;
+  END IF;
+
+  RETURN 500;
+END;
+$$
+LANGUAGE plpgsql IMMUTABLE;
+
 
 CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code varchar(2),
                                         partition INTEGER, keywords INTEGER[],
@@ -282,18 +301,11 @@ CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code varchar(2)
 DECLARE
   locationid INTEGER;
   centroid GEOMETRY;
-  diameter FLOAT;
-  x BOOLEAN;
-  splitGeom RECORD;
+  radius FLOAT;
   secgeo GEOMETRY;
   postcode TEXT;
 BEGIN
-
-  IF rank_search > 25 THEN
-    RAISE EXCEPTION 'Adding location with rank > 25 (% rank %)', place_id, rank_search;
-  END IF;
-
-  x := deleteLocationArea(partition, place_id, rank_search);
+  PERFORM deleteLocationArea(partition, place_id, rank_search);
 
   -- add postcode only if it contains a single entry, i.e. ignore postcode lists
   postcode := NULL;
@@ -305,32 +317,18 @@ BEGIN
     centroid := ST_Centroid(geometry);
 
     FOR secgeo IN select split_geometry(geometry) AS geom LOOP
-      x := insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, false, postcode, centroid, secgeo);
+      PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, false, postcode, centroid, secgeo);
     END LOOP;
 
-  ELSE
-
-    diameter := 0.02;
-    IF rank_address = 0 THEN
-      diameter := 0.02;
-    ELSEIF rank_search <= 14 THEN
-      diameter := 1.2;
-    ELSEIF rank_search <= 15 THEN
-      diameter := 1;
-    ELSEIF rank_search <= 16 THEN
-      diameter := 0.5;
-    ELSEIF rank_search <= 17 THEN
-      diameter := 0.2;
-    ELSEIF rank_search <= 21 THEN
-      diameter := 0.05;
-    ELSEIF rank_search = 25 THEN
-      diameter := 0.005;
-    END IF;
-
---    RAISE WARNING 'adding % diameter %', place_id, diameter;
+  ELSEIF ST_GeometryType(geometry) = 'ST_Point' THEN
+    radius := near_feature_rank_distance(rank_search);
+    --DEBUG: RAISE WARNING 'adding % diameter %', place_id, diameter;
 
-    secgeo := ST_Buffer(geometry, diameter);
-    x := insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, true, postcode, ST_Centroid(geometry), secgeo);
+    -- Create a bounding box with an extent computed from the radius (in meters).
+    secgeo := ST_Envelope(ST_Collect(
+                            ST_Project(geometry, radius, 0.785398)::geometry,
+                            ST_Project(geometry, radius, 3.9269908)::geometry));
+    PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, true, postcode, geometry, secgeo);
 
   END IF;
 
index 07bb429526077275fb2e75452bedd5caf78cb500..531483b316bfce5d29dfa9d4e169175fa0f4c82d 100644 (file)
@@ -175,19 +175,19 @@ Feature: Import into placex
           | N20    | 18          | 16 |
           | N21    | 19          | 16 |
           | N22    | 20          | 20 |
-          | N23    | 17          | 14 |
+          | N23    | 14          | 14 |
           | N24    | 19          | 16 |
-          | N26    | 19          | 18 |
-          | N27    | 20          | 20 |
+          | N26    | 18          | 18 |
+          | N27    | 19          | 20 |
           | N28    | 20          | 20 |
           | N29    | 20          | 20 |
-          | N30    | 20          | 20 |
+          | N30    | 22          | 20 |
           | N31    | 20          | 0 |
           | N32    | 20          | 0 |
           | N33    | 20          | 0 |
           | N34    | 20          | 0 |
           | N101   | 15          | 16 |
-          | N35    | 22          | 22 |
+          | N35    | 20          | 22 |
           | N36    | 30          | 30 |
           | N37    | 30          | 30 |
           | N38    | 28          | 0 |