From b9a1ca4125557f1efc660418adf8cb1c1ff3b485 Mon Sep 17 00:00:00 2001 From: grigo Date: Tue, 23 Jun 2026 15:44:31 +0300 Subject: [PATCH] added fresnel zone --- API.md | 6 ++++-- .../__pycache__/terrain.cpython-313.pyc | Bin 4550 -> 4629 bytes api/app/models/terrain.py | 2 ++ .../__pycache__/terrain.cpython-313.pyc | Bin 9654 -> 9837 bytes api/app/services/terrain.py | 2 ++ .../test_api.cpython-313-pytest-9.0.3.pyc | Bin 20965 -> 21012 bytes api/tests/test_api.py | 2 ++ 7 files changed, 10 insertions(+), 2 deletions(-) diff --git a/API.md b/API.md index 393c4b9..11081d1 100644 --- a/API.md +++ b/API.md @@ -246,6 +246,8 @@ curl -s -X POST http://localhost:5603/api/v1/terrain/los \ "clearance_m": 11.28, "fresnel_radius_m": 11.9, "required_clearance_m": 7.14, + "fresnel_upper_60pct_m": 36.84, + "fresnel_upper_100pct_m": 41.6, "fresnel_lower_60pct_m": 22.56, "fresnel_lower_100pct_m": 17.8, "type": "terrain" @@ -257,8 +259,8 @@ curl -s -X POST http://localhost:5603/api/v1/terrain/los \ - `distance_m` по X. - `surface_m` как земля/DSM. - `path_height_m` как прямая TX-RX. -- `fresnel_lower_60pct_m` как нижняя граница требуемой свободной зоны. -- `fresnel_lower_100pct_m` как нижняя граница полной первой зоны Френеля. +- `fresnel_lower_60pct_m` и `fresnel_upper_60pct_m` как требуемая свободная зона. +- `fresnel_lower_100pct_m` и `fresnel_upper_100pct_m` как полная первая зона Френеля. - точки, где `clearance_m < required_clearance_m`, подсветить как нарушения. ## Buildings diff --git a/api/app/models/__pycache__/terrain.cpython-313.pyc b/api/app/models/__pycache__/terrain.cpython-313.pyc index 4cb4170d3fb58638e72aa373742f7940534eee34..b18207c836490e7998cf5a395727935cb0d0c5fe 100644 GIT binary patch delta 224 zcmX@6JXMA7GcPX}0}v?HTV=^{ZRA_Q&A4gu0yc%oYZ*Bv-{(%59LvY0$QHvI%&!hq z6~i7ZzzU*Sg9SnSV4)(8bYV@A$x%G{s-*=5sYUT-1_j9_@wvCe(uz`x^HOu-A;N|R z5b??Td3qS*C;RYvZ|>$5WMmB3JeRMLkt+dcSP_T_n5-et$e1vBl|Z>XSWp-wBMl;C tfW$2ho80`A(wtPgqTiXzCg+JZPChPb$SyA+!1aMaVDo>`35<*xlP8Gx$j1XMEpi1Bo*+U3L_~v#7!VOV z*;-;ZcPNNy2O<(CGfLVqR&92W%wl8}Waavxv3b4JB_`H-pybBQZL<1IMukA;E!MQ0 z{KS$XkZ=*mlbUQrHXybxh|mKO`XHhSL^Mx+E-%ZtZ!@ccJfmC$P^6d@NGO0nkp@VC zC5*T{*-6n_r4z(e1`%ME0+4l!xwxdLC<7!W3LtAYpM30k*gg z#LAfbT+x6H%9K@-XY8MBt0W5(NKn#{0?S2$)LMavC^#!)@**W=#`ev}lsp+3YbOh+ z=&)6RBMs z1Q8M-A`(PIfr#kIpCon*1cR7%AR-P(+!CF9KwNb4B}o;=ip}38vlvdD7dbl56DlC_h6s;D#0ovf%@ubjci$aaHQ`~x$H@qk0@11pH} SfsKJp@GCo*88-Q_>M8(D&UgL* diff --git a/api/app/services/terrain.py b/api/app/services/terrain.py index 712f68b..73f7bdb 100644 --- a/api/app/services/terrain.py +++ b/api/app/services/terrain.py @@ -130,6 +130,8 @@ def los( clearance_m=sample.clearance_m, fresnel_radius_m=sample.fresnel_radius_m, required_clearance_m=sample.required_clearance_m, + fresnel_upper_60pct_m=sample.path_height_m + sample.required_clearance_m, + fresnel_upper_100pct_m=sample.path_height_m + sample.fresnel_radius_m, fresnel_lower_60pct_m=sample.path_height_m - sample.required_clearance_m, fresnel_lower_100pct_m=sample.path_height_m - sample.fresnel_radius_m, type=sample.obstruction_type, diff --git a/api/tests/__pycache__/test_api.cpython-313-pytest-9.0.3.pyc b/api/tests/__pycache__/test_api.cpython-313-pytest-9.0.3.pyc index 7920574373b1ec6dd8d32653d5b07bb727417861..5ba29df56bd2cd4a4b773635f4d889d42a07fe86 100644 GIT binary patch delta 339 zcmaF5m~qMyM&8f7yj%=G;9GB%m9vp|za1mz!j}1X#P0_CiUxO1AGHQJBdnQvAqLK@12vklEkC_G2?q z8>|gXe1ghLXkQeE=l~0U1Y0S#S;M7_ld*sEeBTI0)@i`dN#Fd(uY!rK3&<>*Hn}QL ZigEtrsew*>DvWGj{TRg=m5TI$QULPEULODe delta 333 zcmbQTgz@QOM&8f7yj%=GU|VCArM{7Oza1m{!RL{Y~ z_JM(eRr|XD13Q0X#s@(l`-1?3fXD?A)rl3x5P# zDYQALH8H)5kY#ktRi^C>2KczG$)vjpn U None: "path_height_m", "fresnel_radius_m", "required_clearance_m", + "fresnel_upper_60pct_m", + "fresnel_upper_100pct_m", "fresnel_lower_60pct_m", "fresnel_lower_100pct_m", }.issubset(data["fresnel_profile"][0])