Skip to main content

Python-библиотека для работы с НСПД (Национальная система пространственных данных)

Project description

NSPD Request

Version GitHub

Python-библиотека для работы с НСПД (Национальная система пространственных данных). Предоставляет упрощенные функции для получения данных по кадастровым номерам и геометриям объектов недвижимости.

⚠️ Важно

Данная библиотека является неофициальным проектом и создана исключительно в образовательных целях

Установка

pip install nspd-request

Или из исходников:

git clone https://github.com/Logar1t/NSPD-request.git
cd NSPD-request
pip install -r requirements.txt

Список функций

Инициализация

Получение кадастровых данных по координатам

Работа с кадастровыми номерами

  • search_by_cadastral_number(kad_number) - Получает полные данные из НСПД по кадастровому номеру
    📖 Подробная документация
  • get_object_info(kad_number, include_geom_id=False, include_object_type=False, include_related=False) - Универсальная функция для получения информации об объекте с дополнительными полями
    📖 Подробная документация
  • get_geom_id(kad_number) - Получает только geom_id (уникальный идентификатор геометрии) по кадастровому номеру
    📖 Подробная документация
  • get_object_type(kad_number) - Определяет точный тип объекта (ЗУ, Здание, Сооружение, ОНС) по кадастровому номеру
    📖 Подробная документация

Получение связанных объектов

  • get_land_plots_by_oks(geom_id, debug=False) - Получает список ЗУ по geomId ОКС (работает для всех типов ОКС: Здание, Сооружение, ОНС)
    📖 Подробная документация
  • get_oks_by_land_plot(geom_id, debug=False) - Получает список ОКС по geomId ЗУ (возвращает все типы ОКС)
    📖 Подробная документация
  • get_related_objects(kad_number, debug=False) - Получает связанные объекты по кадастровому номеру (автоматически определяет тип объекта)
    📖 Подробная документация

Получение объектов по координатам

  • get_by_coordinates(latitude, longitude, object_type='land_plot', bbox_size=0.05) - Универсальная функция для получения кадастрового номера по координатам
    📖 Подробная документация
  • get_land_plot_by_coordinates(latitude, longitude, bbox_size=0.05) - Получает кадастровый номер ЗУ по координатам
    📖 Подробная документация
  • get_oks_by_coordinates(latitude, longitude, bbox_size=0.05) - Получает кадастровый номер ОКС по координатам
    📖 Подробная документация

Grid (массовая выгрузка)

  • get_grid_data(lat, lon, boundary_type='kr', category_id=36368, verbose=False) - Выгружает список объектов выбранной категории в границах, определенных по координатам
    📖 Подробная документация

Параметры boundary_type:

  • 'kr' - Кадастровый район
  • 'kk' - Кадастровый квартал
  • 'ko' - Кадастровый округ

Параметры category_id:

  • 36368 - ЗУ (Земельный участок)
  • 36369 - Здание (ОКС)
  • 36383 - Сооружение (ОКС)
  • 36384 - Объект незавершенного строительства (ОКС)

Примеры использования

Быстрый старт

from nspd_request import NSPD

# Создаем экземпляр
api = NSPD()

# Получение geom_id
geom_id = api.get_geom_id("77:03:0002007:7190")
print(f"geom_id: {geom_id}")  # Выводит: 426710013

# Определение типа объекта
obj_type = api.get_object_type("77:03:0002007:7190")
print(f"Тип: {obj_type}")  # Выводит: ЗУ

# Получение связанных объектов
related = api.get_related_objects("77:03:0002007:7190")
if not related.get("error"):
    print(f"Тип объекта: {related['type']}")  # ЗУ
    print(f"Связанных объектов: {len(related['related'])}")  # 4
    for obj in related['related']:
        print(f"  - {obj}")  # Кадастровые номера связанных ОКС

Получение информации об объекте

from nspd_request import NSPD

api = NSPD()

# Получение полных данных по кадастровому номеру
data = api.search_by_cadastral_number("77:03:0002007:7190")
if "error" not in data:
    print(f"Geom ID: {data.get('geom_id')}")
    print(f"Кадастровый номер: {data.get('kad_number')}")

# Универсальная функция с дополнительными полями
data = api.get_object_info("77:03:0002007:7190", 
                          include_geom_id=True, 
                          include_object_type=True)
if "error" not in data:
    print(f"Geom ID: {data.get('geom_id')}")
    print(f"Тип объекта: {data.get('object_type')}")

Получение связанных объектов

from nspd_request import NSPD

api = NSPD()

# Автоматическое получение связанных объектов
result = api.get_related_objects("77:03:0002007:7190")
if not result.get("error"):
    print(f"Тип объекта: {result['type']}")
    print(f"Geom ID: {result['geom_id']}")
    print(f"Связанных объектов: {len(result['related'])}")
    for obj in result['related']:
        print(f"  - {obj}")

# Или пошагово
geom_id = api.get_geom_id("77:03:0002007:7190")
obj_type = api.get_object_type("77:03:0002007:7190")

if obj_type == "ЗУ":
    # Получаем ОКС на этом ЗУ
    oks_list = api.get_oks_by_land_plot(geom_id)
    print(f"Найдено ОКС: {len(oks_list) if oks_list else 0}")
elif obj_type in ["Здание", "Сооружение", "Объект незавершенного строительства"]:
    # Получаем ЗУ для этого ОКС
    zu_list = api.get_land_plots_by_oks(geom_id)
    print(f"Найдено ЗУ: {len(zu_list) if zu_list else 0}")

Поиск объектов по координатам

from nspd_request import NSPD

api = NSPD()

# Поиск ЗУ по координатам
kad_number = api.get_land_plot_by_coordinates(55.811978, 37.498339)
if kad_number:
    print(f"Найден ЗУ: {kad_number}")
    
    # Получение информации о найденном ЗУ
    info = api.get_object_info(kad_number, include_geom_id=True, include_object_type=True)
    print(f"Тип: {info.get('object_type')}")

# Поиск ОКС по координатам
oks_number = api.get_oks_by_coordinates(55.756126, 37.615042)
if oks_number:
    print(f"Найден ОКС: {oks_number}")

# Универсальная функция
zu_number = api.get_by_coordinates(55.811978, 37.498339, object_type='land_plot')
oks_number = api.get_by_coordinates(55.756126, 37.615042, object_type='oks')

Массовая выгрузка через Grid

from nspd_request import NSPD
from nspd_request import save_json_to_file

api = NSPD()

# Выгрузка всех ЗУ в кадастровом районе
result = api.get_grid_data(
    lat=55.770783,
    lon=37.73718,
    boundary_type='kr',      # Используем границы кадастрового района
    category_id=36368,        # Выгружаем только ЗУ
    verbose=True              # Показывать прогресс
)

if result:
    features = result.get('features', [])
    print(f"Найдено ЗУ в районе: {len(features)}")
    
    # Обработка каждого объекта
    for feature in features[:10]:  # Первые 10
        properties = feature.get('properties', {})
        options = properties.get('options', {})
        cad_num = options.get('cad_num', 'N/A')
        print(f"  - {cad_num}")
    
    # Сохранение в файл (если нужно)
    save_json_to_file(result, 'all_zu_in_region.json')

Получение кадастровых данных по координатам

from nspd_request import NSPD

api = NSPD()

# Получение данных о кадастровом районе
region_data = api.get_cadastral_regions(55.7558, 37.6173, size_meters=1)
if region_data:
    features = region_data.get('features', [])
    if features:
        first = features[0]
        props = first.get('properties', {})
        options = props.get('options', {})
        print(f"Кадастровый номер района: {props.get('descr', 'N/A')}")
        print(f"ЗУ в районе: {options.get('cnt_land_geom', 0)}")
        print(f"ОКС в районе: {options.get('cnt_oks_geom', 0)}")

Обработка ошибок

from nspd_request import NSPD

api = NSPD()

# Проверка ошибок для методов, возвращающих None
geom_id = api.get_geom_id("неверный_номер")
if geom_id is None:
    print("Ошибка: не удалось получить geom_id")

# Проверка ошибок для методов, возвращающих dict
result = api.search_by_cadastral_number("неверный_номер")
if "error" in result:
    print(f"Ошибка: {result['error']}")

# Проверка ошибок для get_related_objects
related = api.get_related_objects("неверный_номер")
if related.get("error"):
    print(f"Ошибка: {related['error']}")

Демонстрация

Запустите файл для просмотра всех примеров:

python demo.py

Демонстрация включает:

  1. Получение geom_id по кадастровому номеру
  2. Определение типа объекта (ЗУ/ОКС)
  3. Получение связанных объектов
  4. Универсальная функция get_object_info() с настройками
  5. Сравнение способов получения данных
  6. Поиск объектов по координатам
  7. Массовая выгрузка через Grid
  8. Обработка ошибок

Подробная документация

Для получения подробной информации о каждой функции, параметрах, возвращаемых значениях и дополнительных примерах см. DOCUMENTATION.md


Требования

  • Python 3.12+
  • requests
  • pyproj (для работы с координатами)
  • shapely (опционально, для работы с Grid)

Поддержка проекта

Самый простой способ - это оставить ⭐ проекту на GitHub и отправить его своим коллегам.

Лицензия

Библиотека создана для работы с открытым НСПД.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nspd_request-2.0.0.tar.gz (25.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nspd_request-2.0.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file nspd_request-2.0.0.tar.gz.

File metadata

  • Download URL: nspd_request-2.0.0.tar.gz
  • Upload date:
  • Size: 25.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for nspd_request-2.0.0.tar.gz
Algorithm Hash digest
SHA256 73d7eab6137c865a86befc6e7617756bff673cefe5fab6f7eb86f0061cd3bc23
MD5 a4d3b06215bff639d88d695f00174c00
BLAKE2b-256 46dad6c366595708e456f265c4e143830bf391998f2f6eb4f169fa44881afb8e

See more details on using hashes here.

File details

Details for the file nspd_request-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: nspd_request-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for nspd_request-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36ce00a06ff2f586381e8098c7f0008e4d97f6aafd6a206c6ae02e4c7758ebcf
MD5 2449a9ddf3ba7e9e2221e7fdaa989f49
BLAKE2b-256 23ba99649b0053a7a5f7143dd1c77748c0a9c14714d915e8f191998708386e08

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page