fix: вода/НП фильтруются строго по сектору (ST_Intersects, не bbox)
Ближайшая вода бралась по bbox сектора: объект в углу bbox, но вне 45°-пирога, попадал в выборку — вода почти не различала направления (1.393 км у N/NE/E с одной воды в центре). Теперь строго внутри сектора: water 1.393–2.337 км по направлениям — честная география.
This commit is contained in:
@@ -104,18 +104,21 @@ def get_zone_features_postgis(lat: float, lon: float, direction: str, radius_m:
|
|||||||
FROM planet_osm_polygon p, s
|
FROM planet_osm_polygon p, s
|
||||||
WHERE (p."natural" = 'water' OR p.landuse = 'reservoir')
|
WHERE (p."natural" = 'water' OR p.landuse = 'reservoir')
|
||||||
AND p.way && s.sector
|
AND p.way && s.sector
|
||||||
|
AND ST_Intersects(p.way, s.sector)
|
||||||
),
|
),
|
||||||
waterway_near AS (
|
waterway_near AS (
|
||||||
SELECT MIN(ST_Distance(l.way, s.center_m)) AS meters
|
SELECT MIN(ST_Distance(l.way, s.center_m)) AS meters
|
||||||
FROM planet_osm_line l, s
|
FROM planet_osm_line l, s
|
||||||
WHERE l.waterway IN ('river','stream','canal','ditch','drain')
|
WHERE l.waterway IN ('river','stream','canal','ditch','drain')
|
||||||
AND l.way && s.sector
|
AND l.way && s.sector
|
||||||
|
AND ST_Intersects(l.way, s.sector)
|
||||||
),
|
),
|
||||||
settle_near AS (
|
settle_near AS (
|
||||||
SELECT MIN(ST_Distance(p.way, s.center_m)) AS meters
|
SELECT MIN(ST_Distance(p.way, s.center_m)) AS meters
|
||||||
FROM planet_osm_point p, s
|
FROM planet_osm_point p, s
|
||||||
WHERE p.place IN ('village','town','city')
|
WHERE p.place IN ('village','town','city')
|
||||||
AND p.way && s.sector
|
AND p.way && s.sector
|
||||||
|
AND ST_Intersects(p.way, s.sector)
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT meters FROM road_len),
|
(SELECT meters FROM road_len),
|
||||||
|
|||||||
Reference in New Issue
Block a user