ObjectNat¶
Пространственный и сетевой анализ городских объектов¶
ObjectNat — библиотека Python с открытым исходным кодом для пространственного анализа городских объектов: зданий, сервисов, наблюдателей на улицах и источников шума. Её разрабатывает команда IDU Университета ИТМО.
Обзор¶
ObjectNat работает с данными GeoPandas и с графами улиц (iduedu.UrbanGraph), которые строит IduEdu по данным OpenStreetMap и GTFS. Страница каждого метода описывает, что вычисляется, алгоритм, параметры и результаты с единицами измерения, пример рисунка и ограничения.
Метод |
Результат |
Функции |
|---|---|---|
Территория, достижимая из точек отправления по графу в пределах бюджета времени (мин) или расстояния (м) |
||
Неперекрывающиеся зоны, которые обслуживает каждый сервис в пределах бюджета |
|
|
Распределение спроса зданий между сервисами ограниченной вместимости в пределах порога стоимости |
|
|
Полигоны видимости и метрики изовист (2D), области видимости с учётом высот зданий и рельефа (2.5D), зоны охвата для множества наблюдателей |
|
|
Уровни звука (дБ) вокруг точечных, линейных и площадных источников среди препятствий и растительности |
|
|
Часы прямого солнца на земле и на фасадах по этажам, за день или за период |
||
Результаты на сетке в виде растров: рисунки matplotlib, файлы GeoTIFF, слои веб-карт folium |
Ресурсоёмкие части (точная видимость, лучи зрения 2.5D, инсоляция, шум на сетке приёмников и распределение в модели обеспеченности) выполняются в параллельных потоках в скомпилированном расширении на Rust, objectnat._rust; поиск по графу использует ускоренные Numba процедуры Дейкстры из IduEdu. В разделе Примеры для каждого метода есть исполняемый ноутбук.
Установка¶
pip install objectnat
ObjectNat поддерживает Python 3.11–3.14 в Linux, macOS и Windows и устанавливает IduEdu версии 2.4.2 или новее в пределах серии 2.x. Колёса (wheels) содержат скомпилированное расширение, поэтому pip не нужен компилятор; сборка из исходного кода требует инструментов Rust (rustup). Для чтения рельефа из GeoTIFF в инсоляции и областях видимости нужен необязательный пакет rasterio. Изменения для кода, написанного под 2.x, перечислены на странице Переход на 3.0.
Быстрый старт¶
Методы на графах принимают iduedu.UrbanGraph. IduEdu может скачать выгрузку Geofabrik, вырезать из неё территорию и построить граф по локальному файлу вместо запросов к Overpass API (для вырезания нужен pip install "iduedu[pbf]"):
import geopandas as gpd
import iduedu
from iduedu import get_4326_boundary, get_intermodal_graph
from shapely.geometry import Point
from objectnat import get_stepped_graph_isochrones
# Vasilyevsky Island district, Saint Petersburg (OSM relation 1114252)
with iduedu.use_pbf(osm_id=1114252, region="northwestern-fed-district"):
boundary = get_4326_boundary(osm_id=1114252)
graph = get_intermodal_graph(territory=boundary, clip_by_territory=True)
origins = gpd.GeoDataFrame(geometry=[Point(30.2706, 59.9355)], crs=4326)
bands = get_stepped_graph_isochrones(
graph,
gdf_origins=origins,
weight_type="time_min",
weight_value_cutoff=10, # minutes
step=2,
geometry_type="separate",
)
Без блока with те же вызовы обращаются к Overpass API.
Методы без графа принимают GeoDataFrame напрямую, например часы солнца среди зданий со столбцом этажности:
from objectnat import get_insolation
receivers = get_insolation(buildings, "2026-06-21", height_column=None, storeys_column="storeys_count")
Настройка¶
from objectnat import config
config.change_logger_lvl("INFO") # hide debug messages
config.set_enable_tqdm(False) # disable progress bars
Участие, контакты и цитирование¶
Задачи (issues) и пул-реквесты принимаются на GitHub; порядок работы описан в CONTRIBUTING.md.
NCCR, Национальный центр когнитивных разработок
IDU, Институт дизайна и урбанистики
Наталья Чичкова, руководитель проекта
Данила Олейников (Donny), ведущий разработчик
ObjectNat распространяется по лицензии BSD 3-Clause (LICENSE.txt). Для цитирования используйте метаданные из CITATION.cff (на GitHub кнопка Cite this repository экспортирует их в формате APA или BibTeX). Публикации об ObjectNat будут перечислены здесь.