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

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

from nspd_request import NSPD

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

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

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

# Получение связанных объектов
related = api.get_related("77:03:0002007:7190")
print(f"Связанных объектов: {len(related['related'])}")

Основные функции

1. Получение geom_id

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

Параметры:

  • kad_number (str): Кадастровый номер

Возвращает:

  • str или None: geom_id или None в случае ошибки

2. Определение типа объекта

from nspd_request import NSPD

api = NSPD()

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

Параметры:

  • kad_number (str): Кадастровый номер

Возвращает:

  • str или None: "ЗУ", "ОКС" или None в случае ошибки

Принцип работы:

  • Сначала определяет по categoryId из meta (36368 = ЗУ, 36369 = ОКС)
  • Если не удалось, анализирует связи с другими объектами

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

from nspd_request import NSPD

api = NSPD()

# Получение связанных объектов
related = api.get_related("77:03:0002007:7190")
print(f"Тип: {related['type']}")  # ЗУ
print(f"Связанных: {len(related['related'])}")  # 4

Параметры:

  • kad_number (str): Кадастровый номер
  • debug (bool): Включить отладочную информацию (по умолчанию False)

Возвращает:

  • dict: Словарь с информацией:
    • data: Полные данные объекта из НСПД
    • geom_id: Извлеченный ID геометрии
    • type: Определенный тип объекта ("ЗУ" или "ОКС")
    • related: Список связанных объектов
    • error: Сообщение об ошибке (если есть)

4. Получение списка ЗУ по geomId ОКС

from nspd_request import NSPD

api = NSPD()

# Получение списка ЗУ по geomId ОКС
zu_list = api.get_zu_by_oks("108123297")
print(f"Найдено ЗУ: {len(zu_list)}")  # 1

Параметры:

  • geom_id (str): ID геометрии ОКС
  • debug (bool): Включить отладочную информацию (по умолчанию False)

Возвращает:

  • list или None: Список ЗУ или None в случае ошибки

5. Получение списка ОКС по geomId ЗУ

from nspd_request import NSPD

api = NSPD()

# Получение списка ОКС по geomId ЗУ
oks_list = api.get_oks_by_zu("426710013")
print(f"Найдено ОКС: {len(oks_list)}")  # 4

Параметры:

  • geom_id (str): ID геометрии ЗУ
  • debug (bool): Включить отладочную информацию (по умолчанию False)

Возвращает:

  • list или None: Список ОКС или None в случае ошибки

6. Универсальная функция get_info()

from nspd_request import NSPD

api = NSPD()

# Только базовые данные
data = api.get_info("77:03:0002007:7190")

# С дополнительным geom_id
data = api.get_info("77:03:0002007:7190", include_geom_id=True)

# С дополнительным object_type
data = api.get_info("77:03:0002007:7190", include_object_type=True)

# С обоими дополнительными полями
data = api.get_info("77:03:0002007:7190", include_geom_id=True, include_object_type=True)

Параметры:

  • kad_number (str): Кадастровый номер
  • include_geom_id (bool): Дополнительно включить geom_id в результат
  • include_object_type (bool): Дополнительно включить object_type в результат

Возвращает:

  • dict: Словарь с данными и дополнительными полями (если запрошены)

Преимущества:

  • По умолчанию возвращает все данные из НСПД
  • Можно настроить дополнительные поля через параметры
  • Эффективнее чем несколько отдельных запросов

7. Получение ЗУ по координатам

from nspd_request import NSPD

api = NSPD()

# Получение ЗУ по координатам (широта, долгота)
kad_number = api.get_zu_by_coordinates(55.811978, 37.498339)
print(f"Найден ЗУ: {kad_number}")  # 77:09:0004001:8

# С настройкой размера области поиска
kad_number = api.get_zu_by_coordinates(55.7558, 37.6176, bbox_size=0.1)
print(f"Найден ЗУ: {kad_number}")

Параметры:

  • latitude (float): Широта в градусах (WGS84)
  • longitude (float): Долгота в градусах (WGS84)
  • bbox_size (float): Размер области поиска в метрах (по умолчанию 0.05)

Возвращает:

  • str или None: Кадастровый номер ЗУ или None в случае ошибки

Особенности:

  • Автоматически преобразует координаты из WGS84 в EPSG:3857
  • Создает BBOX для поиска в указанной области
  • Возвращает первый найденный ЗУ в области
  • Можно настроить размер области поиска через bbox_size

Полный рабочий процесс

Простой способ (рекомендуется)

from nspd_request import NSPD

api = NSPD()

# Одна функция делает все автоматически!
result = api.get_related("77:03:0002007:7190")

if result["error"]:
    print(f"Ошибка: {result['error']}")
else:
    print(f"Тип объекта: {result['type']}")
    print(f"geomId: {result['geom_id']}")
    print(f"Связанные объекты ({len(result['related'])}):")
    
    for i, obj in enumerate(result['related'], 1):
        print(f"  {i}. {obj}")

Пошаговый способ

from nspd_request import NSPD

api = NSPD()
kad_number = "77:03:0002007:7190"

# 1. Получаем geom_id
geom_id = api.get_geom_id(kad_number)
print(f"geom_id: {geom_id}")

# 2. Определяем тип объекта
obj_type = api.get_object_type(kad_number)
print(f"Тип: {obj_type}")

# 3. Получаем связанные объекты
if obj_type == "ЗУ":
    oks_list = api.get_oks_by_zu(geom_id)
    print(f"Найдено ОКС: {len(oks_list) if oks_list else 0}")
elif obj_type == "ОКС":
    zu_list = api.get_zu_by_oks(geom_id)
    print(f"Найдено ЗУ: {len(zu_list) if zu_list else 0}")

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

Все функции возвращают понятные сообщения об ошибках:

from nspd_request import NSPD

api = NSPD()

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

# Проверка ошибок для определения типа объекта
obj_type = api.get_object_type("неверный_номер")
if obj_type is None:
    print("Ошибка при определении типа объекта")

# Проверка ошибок для получения связанных объектов
related = api.get_related("неверный_номер")
if related.get("error"):
    print(f"Ошибка: {related['error']}")

# Проверка ошибок для получения списков
zu_list = api.get_zu_by_oks("неверный_id")
if zu_list is None:
    print("Ошибка при получении списка ЗУ")

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

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

python demo.py

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

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

Требования

  • Python 3.12+
  • requests
  • pyproj (для работы с координатами)

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

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

Лицензия

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

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-1.0.2.tar.gz (14.1 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-1.0.2-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for nspd_request-1.0.2.tar.gz
Algorithm Hash digest
SHA256 c87708a5a7e60425b1c1e1ca904750566bcaa280373322e4a72519377e4edb91
MD5 7c32c7b46be73705530fd6ffe5db96a7
BLAKE2b-256 d89066b779ff57760da794348a0baa255646c8f1930a428966130f8373e580d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nspd_request-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.3 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-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c53690e758d3fb6b04a1e6f32c6092497397a66a53b91fc5d4815b9f8e4853ea
MD5 e1518f277fdf336f6a1da63a9ed93f52
BLAKE2b-256 b224cf0a477a3b2a063b9c5dd0ed0547dcca5910f8cb2fd479710f0a09ac0e96

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