export centroid to tokenizer

May come in handy when developping sanitizers for an area smaller
than country size.
This commit is contained in:
Sarah Hoffmann 2022-07-31 22:10:58 +02:00
parent e427712cb0
commit b19c90b9a6
2 changed files with 15 additions and 2 deletions

View File

@ -16,7 +16,9 @@ CREATE TYPE prepare_update_info AS (
country_code TEXT, country_code TEXT,
class TEXT, class TEXT,
type TEXT, type TEXT,
linked_place_id BIGINT linked_place_id BIGINT,
centroid_x float,
centroid_y float
); );
-- Retrieve the data needed by the indexer for updating the place. -- Retrieve the data needed by the indexer for updating the place.
@ -71,6 +73,8 @@ BEGIN
result.type := p.type; result.type := p.type;
result.country_code := p.country_code; result.country_code := p.country_code;
result.rank_address := p.rank_address; result.rank_address := p.rank_address;
result.centroid_x := ST_X(p.centroid);
result.centroid_y := ST_Y(p.centroid);
-- Names of linked places need to be merged in, so search for a linkable -- Names of linked places need to be merged in, so search for a linkable
-- place already here. -- place already here.

View File

@ -8,7 +8,7 @@
Wrapper around place information the indexer gets from the database and hands to Wrapper around place information the indexer gets from the database and hands to
the tokenizer. the tokenizer.
""" """
from typing import Optional, Mapping, Any from typing import Optional, Mapping, Any, Tuple
class PlaceInfo: class PlaceInfo:
""" This data class contains all information the tokenizer can access """ This data class contains all information the tokenizer can access
@ -62,6 +62,15 @@ class PlaceInfo:
return self._info.get('rank_address', 0) return self._info.get('rank_address', 0)
@property
def centroid(self) -> Optional[Tuple[float, float]]:
""" A center point of the place in WGS84. May be None when the
geometry of the place is unknown.
"""
x, y = self._info.get('centroid_x'), self._info.get('centroid_y')
return None if x is None or y is None else (x, y)
def is_a(self, key: str, value: str) -> bool: def is_a(self, key: str, value: str) -> bool:
""" Set to True when the place's primary tag corresponds to the given """ Set to True when the place's primary tag corresponds to the given
key and value. key and value.