From d08d06d8a829215e29ad9718d2b691ad38374dfe Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 11 May 2026 20:09:58 +0300 Subject: [PATCH] =?UTF-8?q?fix(geo):=20parcels=20(thematic=5Fid=3D1)=20com?= =?UTF-8?q?e=20from=20rosreestr2coord=20in=20WGS84=20=E2=80=94=20drop=20ST?= =?UTF-8?q?=5FTransform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/workers/tasks/nspd_geo.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/app/workers/tasks/nspd_geo.py b/backend/app/workers/tasks/nspd_geo.py index f0b17c74..96cd9882 100644 --- a/backend/app/workers/tasks/nspd_geo.py +++ b/backend/app/workers/tasks/nspd_geo.py @@ -208,7 +208,13 @@ def _save_building(db: Session, payload: dict, cad_num: str) -> int: def _save_parcel(db: Session, payload: dict, cad_num: str) -> int: - """Парсит NSPD-response для земельного участка и UPSERT'ит в cad_parcels_geom.""" + """Парсит NSPD-response для земельного участка и UPSERT'ит в cad_parcels_geom. + + NB: rosreestr2coord для area_type=1 (parcel) отдаёт GeoJSON уже в WGS84 + (EPSG:4326, degrees). Просто ST_SetSRID — без ST_Transform, иначе геометрия + сжимается до точки в районе (0,0) на острове Null. Quarters/buildings — + другой path, у них Mercator (3857) и нужен ST_Transform. + """ feats = (payload.get("data") or {}).get("features") or [] if not feats: return 0 @@ -220,7 +226,7 @@ def _save_parcel(db: Session, payload: dict, cad_num: str) -> int: text( """ INSERT INTO cad_parcels_geom (cad_num, geom, raw_props, fetched_at) - VALUES (:cad, ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(:g), 3857), 4326), + VALUES (:cad, ST_SetSRID(ST_GeomFromGeoJSON(:g), 4326), CAST(:props AS jsonb), NOW()) ON CONFLICT (cad_num) DO UPDATE SET geom = EXCLUDED.geom,