mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
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
|
-- cheaper but less acurate
|
||||||
place_centroid := ST_PointOnSurface(NEW.geometry);
|
place_centroid := ST_PointOnSurface(NEW.geometry);
|
||||||
-- For searching near features rather use the centroid
|
-- For searching near features rather use the centroid
|
||||||
near_centroid := ST_Centroid(NEW.geometry);
|
near_centroid := ST_Envelope(NEW.geometry);
|
||||||
NEW.centroid := null;
|
NEW.centroid := null;
|
||||||
NEW.postcode := null;
|
NEW.postcode := null;
|
||||||
--DEBUG: RAISE WARNING 'Computing preliminary centroid at %',ST_AsText(place_centroid);
|
--DEBUG: RAISE WARNING 'Computing preliminary centroid at %',ST_AsText(place_centroid);
|
||||||
@@ -1521,7 +1521,7 @@ BEGIN
|
|||||||
NEW.postcode := location.postcode;
|
NEW.postcode := location.postcode;
|
||||||
END IF;
|
END IF;
|
||||||
IF NEW.postcode is null THEN
|
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;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
@@ -1791,7 +1791,7 @@ BEGIN
|
|||||||
CASE WHEN NEW.rank_search >= 26
|
CASE WHEN NEW.rank_search >= 26
|
||||||
AND NEW.rank_search < 30
|
AND NEW.rank_search < 30
|
||||||
THEN NEW.geometry
|
THEN NEW.geometry
|
||||||
ELSE near_centroid END,
|
ELSE place_centroid END,
|
||||||
search_maxrank, isin_tokens)
|
search_maxrank, isin_tokens)
|
||||||
LOOP
|
LOOP
|
||||||
IF location.rank_address != location_rank_search THEN
|
IF location.rank_address != location_rank_search THEN
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ BEGIN
|
|||||||
ST_Distance(centroid, point) as distance, null as isguess
|
ST_Distance(centroid, point) as distance, null as isguess
|
||||||
FROM search_name_-partition-
|
FROM search_name_-partition-
|
||||||
WHERE name_vector && isin_token
|
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
|
AND search_rank between 26 and 27
|
||||||
ORDER BY distance ASC limit 1
|
ORDER BY distance ASC limit 1
|
||||||
LOOP
|
LOOP
|
||||||
@@ -123,7 +123,7 @@ BEGIN
|
|||||||
ST_Distance(centroid, point) as distance, null as isguess
|
ST_Distance(centroid, point) as distance, null as isguess
|
||||||
FROM search_name_-partition-
|
FROM search_name_-partition-
|
||||||
WHERE name_vector && isin_token
|
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
|
AND search_rank between 16 and 22
|
||||||
ORDER BY distance ASC limit 1
|
ORDER BY distance ASC limit 1
|
||||||
LOOP
|
LOOP
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ Feature: Parenting of objects
|
|||||||
When importing
|
When importing
|
||||||
Then placex contains
|
Then placex contains
|
||||||
| object | parent_place_id |
|
| object | parent_place_id |
|
||||||
| W1 | W3 |
|
| W1 | W2 |
|
||||||
|
|
||||||
Scenario: Building with addr:street tags
|
Scenario: Building with addr:street tags
|
||||||
Given the scene building-on-street-corner
|
Given the scene building-on-street-corner
|
||||||
|
|||||||
38
test/bdd/db/update/parenting.feature
Normal file
38
test/bdd/db/update/parenting.feature
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
@DB
|
||||||
|
Feature: Update parenting of objects
|
||||||
|
|
||||||
|
Scenario: POI inside building inherits addr:street change
|
||||||
|
Given the scene building-on-street-corner
|
||||||
|
And the named places
|
||||||
|
| osm | class | type | geometry |
|
||||||
|
| N1 | amenity | bank | :n-inner |
|
||||||
|
| N2 | shop | bakery | :n-edge-NS |
|
||||||
|
| N3 | shop | supermarket| :n-edge-WE |
|
||||||
|
And the places
|
||||||
|
| osm | class | type | addr_place | housenr | geometry |
|
||||||
|
| W1 | building | yes | nowhere | 3 | :w-building |
|
||||||
|
And the places
|
||||||
|
| osm | class | type | name | geometry |
|
||||||
|
| W2 | highway | primary | bar | :w-WE |
|
||||||
|
| W3 | highway | residential | foo | :w-NS |
|
||||||
|
When importing
|
||||||
|
Then placex contains
|
||||||
|
| object | parent_place_id | housenumber |
|
||||||
|
| W1 | W2 | 3 |
|
||||||
|
| N1 | W3 | 3 |
|
||||||
|
| N2 | W3 | 3 |
|
||||||
|
| N3 | W2 | 3 |
|
||||||
|
When updating places
|
||||||
|
| osm | class | type | street | addr_place | housenr | geometry |
|
||||||
|
| W1 | building | yes | foo | nowhere | 3 | :w-building |
|
||||||
|
And updating places
|
||||||
|
| osm | class | type | name | geometry |
|
||||||
|
| N3 | shop | supermarket| well | :n-edge-WE |
|
||||||
|
Then placex contains
|
||||||
|
| object | parent_place_id | housenumber |
|
||||||
|
| W1 | W3 | 3 |
|
||||||
|
| N1 | W3 | 3 |
|
||||||
|
| N2 | W3 | 3 |
|
||||||
|
| N3 | W3 | 3 |
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user