Переход на 3.0

ObjectNat 3.0 выполняет ресурсоёмкие расчёты в скомпилированном движке на Rust, objectnat._rust, и добавляет на его основе методы 2.5D и расчёты на сетке. Ни одна функция не удалена и не переименована, но параметры прежних реализаций на Python удалены, часть результатов изменилась, а установка из исходного кода требует инструментов Rust. Версия 2.2.0 уже содержит новый движок и ещё принимает удалённые параметры с предупреждением, поэтому эта страница относится к переходу с любой версии 2.x.

Что меняется для существующего кода

Изменение

Следствие

Что сделать

Изохроны и зоны покрытия типа radius следуют за сетью

При geometry_type="radius" каждый достижимый узел окружается буфером по оставшемуся бюджету, но не больше off_network_distance (по умолчанию 150 м), поэтому область больше не разрастается в круг по прямой вокруг начальной точки

off_network_distance=None сохраняет форму из 2.x

У get_visibility() один точный метод

method, resolution и parallel удалены: видимость всегда точная и считается в параллельных потоках; max_workers ограничивает число потоков

Уберите эти аргументы; get_visibility(points, obstacles, 100) заменяет get_visibility(points, obstacles, 100, "simple")

calculate_simplified_noise_frame() всегда считает видимость в параллельных потоках

visibility_parallel удалён

Уберите аргумент; visibility_max_workers ограничивает число потоков

Распределение обеспеченности выполняется на Rust

При заданном seed распределение отличается от 2.1, но статистически с ним совпадает и одинаково на любом числе ядер; get_service_provision() также принимает разреженную OD-матрицу pandas

Ничего: модель и сигнатура не изменились

Отражения шума детерминированы

simulate_noise() даёт одинаковый результат при каждом запуске

Ничего

Установка

Колёса (wheels) содержат скомпилированное расширение; сборка из исходного кода требует Rust; нужен IduEdu 2.4.2 или новее

pip install -U objectnat устанавливает колесо, компилятор не нужен

Что нового

  • Инсоляция: часы прямого солнца на земле (get_insolation()) и на фасадах по этажам (get_facade_insolation()) среди зданий и рельефа, за день или период.

  • Анализ видимости: области видимости 2.5D с учётом высот зданий и рельефа (get_viewshed()), метрики изовист в get_visibility(), поля изовист на сетке (get_isovist_grid()), охват множества наблюдателей в 2D и 2.5D (get_visibility_catchment(), get_viewshed_catchment()) и наблюдатели вдоль пешеходного графа (get_observer_points()).

  • Моделирование шума: simulate_noise_grid(), уровни звука на сетке приёмников вокруг точечных, линейных и площадных источников с отражениями и дифракцией на углах зданий.

  • Растры: rasterize() и Raster превращают результаты на сетке в графики matplotlib, файлы GeoTIFF и веб-карты.

  • Скорость: точная видимость и распределение обеспеченности стали во много раз быстрее (обеспеченность на данных примера считается за 0,06 с вместо 2,6 с), а изохроны для многих начальных точек строятся быстрее с той же геометрией.