forked from hans/Nominatim
move ordering out of getNearFeatures
The two places where the function is called have different ordering requirement.
This commit is contained in:
@@ -307,7 +307,13 @@ BEGIN
|
|||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
FOR location IN
|
FOR location IN
|
||||||
SELECT * FROM getNearFeatures(partition, geometry, maxrank, isin_tokens)
|
SELECT * FROM getNearFeatures(partition, geometry, maxrank)
|
||||||
|
ORDER BY rank_address, isin_tokens && keywords desc, isguess asc,
|
||||||
|
distance *
|
||||||
|
CASE WHEN rank_address = 16 AND rank_search = 15 THEN 0.2
|
||||||
|
WHEN rank_address = 16 AND rank_search = 16 THEN 0.25
|
||||||
|
WHEN rank_address = 16 AND rank_search = 18 THEN 0.5
|
||||||
|
ELSE 1 END ASC
|
||||||
LOOP
|
LOOP
|
||||||
IF location.rank_address != current_rank_address THEN
|
IF location.rank_address != current_rank_address THEN
|
||||||
current_rank_address := location.rank_address;
|
current_rank_address := location.rank_address;
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ BEGIN
|
|||||||
NEW.parent_place_id = 0;
|
NEW.parent_place_id = 0;
|
||||||
FOR location IN
|
FOR location IN
|
||||||
SELECT place_id
|
SELECT place_id
|
||||||
FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search, '{}'::int[])
|
FROM getNearFeatures(partition, NEW.geometry, NEW.rank_search)
|
||||||
WHERE NOT isguess ORDER BY rank_address DESC LIMIT 1
|
WHERE NOT isguess ORDER BY rank_address DESC, distance asc LIMIT 1
|
||||||
LOOP
|
LOOP
|
||||||
NEW.parent_place_id = location.place_id;
|
NEW.parent_place_id = location.place_id;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ BEGIN
|
|||||||
END
|
END
|
||||||
$$ LANGUAGE plpgsql IMMUTABLE;
|
$$ LANGUAGE plpgsql IMMUTABLE;
|
||||||
|
|
||||||
create or replace function getNearFeatures(in_partition INTEGER, feature GEOMETRY, maxrank INTEGER, isin_tokens INT[]) RETURNS setof nearfeaturecentr AS $$
|
create or replace function getNearFeatures(in_partition INTEGER, feature GEOMETRY, maxrank INTEGER) RETURNS setof nearfeaturecentr AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
r nearfeaturecentr%rowtype;
|
r nearfeaturecentr%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -46,13 +46,6 @@ BEGIN
|
|||||||
AND is_relevant_geometry(ST_Relate(geometry, feature), ST_GeometryType(feature))
|
AND is_relevant_geometry(ST_Relate(geometry, feature), ST_GeometryType(feature))
|
||||||
AND rank_address < maxrank
|
AND rank_address < maxrank
|
||||||
GROUP BY place_id, keywords, rank_address, rank_search, isguess, postcode, centroid
|
GROUP BY place_id, keywords, rank_address, rank_search, isguess, postcode, centroid
|
||||||
ORDER BY rank_address, isin_tokens && keywords desc, isguess asc,
|
|
||||||
ST_Distance(feature, centroid) *
|
|
||||||
CASE
|
|
||||||
WHEN rank_address = 16 AND rank_search = 15 THEN 0.2 -- capital city
|
|
||||||
WHEN rank_address = 16 AND rank_search = 16 THEN 0.25 -- city
|
|
||||||
WHEN rank_address = 16 AND rank_search = 17 THEN 0.5 -- town
|
|
||||||
ELSE 1 END ASC -- everything else
|
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT r;
|
RETURN NEXT r;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
|
|||||||
Reference in New Issue
Block a user