mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-15 10:57:58 +00:00
use computed centroid for location_area_large
The new address computation assumes that the centroid is inside the area. Therefore we cannot use the centroid function. Use the pre-computed centroid instead which has already been corrected to be inside the area.
This commit is contained in:
@@ -301,12 +301,12 @@ LANGUAGE plpgsql IMMUTABLE;
|
||||
CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code varchar(2),
|
||||
partition INTEGER, keywords INTEGER[],
|
||||
rank_search INTEGER, rank_address INTEGER,
|
||||
in_postcode TEXT, geometry GEOMETRY)
|
||||
in_postcode TEXT, geometry GEOMETRY,
|
||||
centroid GEOMETRY)
|
||||
RETURNS BOOLEAN
|
||||
AS $$
|
||||
DECLARE
|
||||
locationid INTEGER;
|
||||
centroid GEOMETRY;
|
||||
secgeo GEOMETRY;
|
||||
postcode TEXT;
|
||||
BEGIN
|
||||
@@ -319,15 +319,13 @@ BEGIN
|
||||
END IF;
|
||||
|
||||
IF ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') THEN
|
||||
centroid := ST_Centroid(geometry);
|
||||
|
||||
FOR secgeo IN select split_geometry(geometry) AS geom LOOP
|
||||
PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, false, postcode, centroid, secgeo);
|
||||
END LOOP;
|
||||
|
||||
ELSEIF ST_GeometryType(geometry) = 'ST_Point' THEN
|
||||
secgeo := place_node_fuzzy_area(geometry, rank_search);
|
||||
PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, true, postcode, geometry, secgeo);
|
||||
PERFORM insertLocationAreaLarge(partition, place_id, country_code, keywords, rank_search, rank_address, true, postcode, centroid, secgeo);
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user