Python-библиотека для работы с НСПД (Национальная система пространственных данных)
Project description
NSPD Request
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
Демонстрация включает:
- Получение geom_id по кадастровому номеру
- Определение типа объекта (ЗУ/ОКС)
- Получение связанных объектов
- Универсальная функция get_info() с настройками
- Сравнение способов получения данных
- Демонстрация оптимизации
- Обработка ошибок
- Поиск ЗУ по координатам
- Тестирование производительности
Требования
- 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c87708a5a7e60425b1c1e1ca904750566bcaa280373322e4a72519377e4edb91
|
|
| MD5 |
7c32c7b46be73705530fd6ffe5db96a7
|
|
| BLAKE2b-256 |
d89066b779ff57760da794348a0baa255646c8f1930a428966130f8373e580d7
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c53690e758d3fb6b04a1e6f32c6092497397a66a53b91fc5d4815b9f8e4853ea
|
|
| MD5 |
e1518f277fdf336f6a1da63a9ed93f52
|
|
| BLAKE2b-256 |
b224cf0a477a3b2a063b9c5dd0ed0547dcca5910f8cb2fd479710f0a09ac0e96
|