]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSarah Hoffmann <lonvia@denofr.de>
Mon, 10 Jun 2019 17:05:18 +0000 (19:05 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Mon, 10 Jun 2019 17:05:18 +0000 (19:05 +0200)
1  2 
sql/functions.sql

diff --combined sql/functions.sql
index d42d9fca36a9e9030856340df0655798c8981490,8a5c9bc53cc522a3adad309ff0d91c8f10d4d3e4..75ccfd689669dcf7c1673dd9ad8beee7f1c7d216
@@@ -1162,6 -1162,7 +1162,7 @@@ TRIGGE
  DECLARE
  
    place_centroid GEOMETRY;
+   near_centroid GEOMETRY;
  
    search_maxdistance FLOAT[];
    search_mindistance FLOAT[];
@@@ -1266,6 -1267,8 +1267,8 @@@ BEGI
    -- Speed up searches - just use the centroid of the feature
    -- cheaper but less acurate
    place_centroid := ST_PointOnSurface(NEW.geometry);
+   -- For searching near features rather use the centroid
+   near_centroid := ST_Centroid(NEW.geometry);
    NEW.centroid := null;
    NEW.postcode := null;
    --DEBUG: RAISE WARNING 'Computing preliminary centroid at %',ST_AsText(place_centroid);
      IF NEW.parent_place_id IS NULL AND addr_street IS NOT NULL THEN
        address_street_word_ids := get_name_ids(make_standard_name(addr_street));
        IF address_street_word_ids IS NOT NULL THEN
-         SELECT place_id from getNearestNamedRoadFeature(NEW.partition, place_centroid, address_street_word_ids) INTO NEW.parent_place_id;
+         SELECT place_id from getNearestNamedRoadFeature(NEW.partition, near_centroid, address_street_word_ids) INTO NEW.parent_place_id;
        END IF;
      END IF;
      --DEBUG: RAISE WARNING 'Checked for addr:street (%)', NEW.parent_place_id;
      IF NEW.parent_place_id IS NULL AND addr_place IS NOT NULL THEN
        address_street_word_ids := get_name_ids(make_standard_name(addr_place));
        IF address_street_word_ids IS NOT NULL THEN
-         SELECT place_id from getNearestNamedPlaceFeature(NEW.partition, place_centroid, address_street_word_ids) INTO NEW.parent_place_id;
+         SELECT place_id from getNearestNamedPlaceFeature(NEW.partition, near_centroid, address_street_word_ids) INTO NEW.parent_place_id;
        END IF;
      END IF;
      --DEBUG: RAISE WARNING 'Checked for addr:place (%)', NEW.parent_place_id;
            IF location.address ? 'street' THEN
              address_street_word_ids := get_name_ids(make_standard_name(location.address->'street'));
              IF address_street_word_ids IS NOT NULL THEN
-               SELECT place_id from getNearestNamedRoadFeature(NEW.partition, place_centroid, address_street_word_ids) INTO NEW.parent_place_id;
+               SELECT place_id from getNearestNamedRoadFeature(NEW.partition, near_centroid, address_street_word_ids) INTO NEW.parent_place_id;
                EXIT WHEN NEW.parent_place_id is not NULL;
              END IF;
            END IF;
            IF location.address ? 'place' THEN
              address_street_word_ids := get_name_ids(make_standard_name(location.address->'place'));
              IF address_street_word_ids IS NOT NULL THEN
-               SELECT place_id from getNearestNamedPlaceFeature(NEW.partition, place_centroid, address_street_word_ids) INTO NEW.parent_place_id;
+               SELECT place_id from getNearestNamedPlaceFeature(NEW.partition, near_centroid, address_street_word_ids) INTO NEW.parent_place_id;
                EXIT WHEN NEW.parent_place_id is not NULL;
              END IF;
            END IF;
  
      -- Still nothing, just use the nearest road
      IF NEW.parent_place_id IS NULL THEN
-       SELECT place_id FROM getNearestRoadFeature(NEW.partition, place_centroid) INTO NEW.parent_place_id;
+       SELECT place_id FROM getNearestRoadFeature(NEW.partition, near_centroid) INTO NEW.parent_place_id;
      END IF;
      --DEBUG: RAISE WARNING 'Checked for nearest way (%)', NEW.parent_place_id;
  
               NEW.postcode := location.postcode;
            END IF;
            IF NEW.postcode is null THEN
-             NEW.postcode := get_nearest_postcode(NEW.country_code, place_centroid);
+             NEW.postcode := get_nearest_postcode(NEW.country_code, near_centroid);
            END IF;
        END IF;
  
                                    CASE WHEN NEW.rank_search >= 26
                                               AND NEW.rank_search < 30
                                         THEN NEW.geometry
-                                        ELSE place_centroid END,
+                                        ELSE near_centroid END,
                                    search_maxrank, isin_tokens)
    LOOP
      IF location.rank_address != location_rank_search THEN
@@@ -2427,7 -2430,7 +2430,7 @@@ BEGI
      SELECT placex.place_id, osm_type, osm_id, name,
             CASE WHEN extratags ? 'place' THEN 'place' ELSE class END as class,
             CASE WHEN extratags ? 'place' THEN extratags->'place' ELSE type END as type,
 -           admin_level, fromarea, isaddress,
 +           admin_level, fromarea, isaddress and linked_place_id is NULL as isaddress,
             CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
             distance, country_code, postcode
        FROM place_addressline join placex on (address_place_id = placex.place_id)