forked from hans/Nominatim
use bbox of geometry when searching for attached streets
As we are doing a distance search, this improves results for large places like airports. Fixes #1442.
This commit is contained in:
@@ -1286,7 +1286,7 @@ BEGIN
|
||||
-- cheaper but less acurate
|
||||
place_centroid := ST_PointOnSurface(NEW.geometry);
|
||||
-- For searching near features rather use the centroid
|
||||
near_centroid := ST_Centroid(NEW.geometry);
|
||||
near_centroid := ST_Envelope(NEW.geometry);
|
||||
NEW.centroid := null;
|
||||
NEW.postcode := null;
|
||||
--DEBUG: RAISE WARNING 'Computing preliminary centroid at %',ST_AsText(place_centroid);
|
||||
@@ -1521,7 +1521,7 @@ BEGIN
|
||||
NEW.postcode := location.postcode;
|
||||
END IF;
|
||||
IF NEW.postcode is null THEN
|
||||
NEW.postcode := get_nearest_postcode(NEW.country_code, near_centroid);
|
||||
NEW.postcode := get_nearest_postcode(NEW.country_code, NEW.geometry);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
@@ -1791,7 +1791,7 @@ BEGIN
|
||||
CASE WHEN NEW.rank_search >= 26
|
||||
AND NEW.rank_search < 30
|
||||
THEN NEW.geometry
|
||||
ELSE near_centroid END,
|
||||
ELSE place_centroid END,
|
||||
search_maxrank, isin_tokens)
|
||||
LOOP
|
||||
IF location.rank_address != location_rank_search THEN
|
||||
|
||||
@@ -95,7 +95,7 @@ BEGIN
|
||||
ST_Distance(centroid, point) as distance, null as isguess
|
||||
FROM search_name_-partition-
|
||||
WHERE name_vector && isin_token
|
||||
AND ST_DWithin(centroid, point, 0.015)
|
||||
AND centroid && ST_Expand(point, 0.015)
|
||||
AND search_rank between 26 and 27
|
||||
ORDER BY distance ASC limit 1
|
||||
LOOP
|
||||
@@ -123,7 +123,7 @@ BEGIN
|
||||
ST_Distance(centroid, point) as distance, null as isguess
|
||||
FROM search_name_-partition-
|
||||
WHERE name_vector && isin_token
|
||||
AND ST_DWithin(centroid, point, 0.04)
|
||||
AND centroid && ST_Expand(point, 0.04)
|
||||
AND search_rank between 16 and 22
|
||||
ORDER BY distance ASC limit 1
|
||||
LOOP
|
||||
|
||||
Reference in New Issue
Block a user