From: Sarah Hoffmann Date: Mon, 31 Jul 2023 08:20:58 +0000 (+0200) Subject: Merge pull request #3128 from lonvia/fix-classtype-lookup X-Git-Tag: v4.3.0~46 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/c29ffc38e6cef4bb99fd40060be8243ea70e5939?hp=d97ca9fcb2ae54080d6b92c7e85ff111308bc1cc Merge pull request #3128 from lonvia/fix-classtype-lookup Fix query over classtype tables --- diff --git a/nominatim/api/search/db_searches.py b/nominatim/api/search/db_searches.py index 5c1d98c9..85dc3019 100644 --- a/nominatim/api/search/db_searches.py +++ b/nominatim/api/search/db_searches.py @@ -287,10 +287,11 @@ class NearSearch(AbstractSearch): # radius for the lookup. sql = sql.join(table, t.c.place_id == table.c.place_id)\ .join(tgeom, - sa.case((sa.and_(tgeom.c.rank_address < 9, - tgeom.c.geometry.is_area()), - tgeom.c.geometry.ST_Contains(table.c.centroid)), - else_ = tgeom.c.centroid.ST_DWithin(table.c.centroid, 0.05)))\ + table.c.centroid.ST_CoveredBy( + sa.case((sa.and_(tgeom.c.rank_address < 9, + tgeom.c.geometry.is_area()), + tgeom.c.geometry), + else_ = tgeom.c.centroid.ST_Expand(0.05))))\ .order_by(tgeom.c.centroid.ST_Distance(table.c.centroid)) sql = sql.where(t.c.rank_address.between(MIN_RANK_PARAM, MAX_RANK_PARAM)) diff --git a/nominatim/db/sqlalchemy_types.py b/nominatim/db/sqlalchemy_types.py index f31966cd..7d3789aa 100644 --- a/nominatim/db/sqlalchemy_types.py +++ b/nominatim/db/sqlalchemy_types.py @@ -74,7 +74,11 @@ class Geometry(types.UserDefinedType): # type: ignore[type-arg] def ST_Contains(self, other: SaColumn) -> SaColumn: - return sa.func.ST_Contains(self, other, type_=sa.Float) + return sa.func.ST_Contains(self, other, type_=sa.Boolean) + + + def ST_CoveredBy(self, other: SaColumn) -> SaColumn: + return sa.func.ST_CoveredBy(self, other, type_=sa.Boolean) def ST_ClosestPoint(self, other: SaColumn) -> SaColumn: