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
Список функций
Инициализация
NSPD(timeout=30)- Создание экземпляра класса с настройкой таймаута запросов
📖 Подробная документация
Получение кадастровых данных по координатам
get_cadastral_districts(lat, lon, size_meters=100)- Получает данные о кадастровых округах по координатам
📖 Подробная документацияget_cadastral_quarters(lat, lon, size_meters=100)- Получает данные о кадастровых кварталах по координатам
📖 Подробная документацияget_cadastral_regions(lat, lon, size_meters=1)- Получает данные о кадастровых районах по координатам
📖 Подробная документация
Работа с кадастровыми номерами
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
Демонстрация включает:
- Получение geom_id по кадастровому номеру
- Определение типа объекта (ЗУ/ОКС)
- Получение связанных объектов
- Универсальная функция get_object_info() с настройками
- Сравнение способов получения данных
- Поиск объектов по координатам
- Массовая выгрузка через Grid
- Обработка ошибок
Подробная документация
Для получения подробной информации о каждой функции, параметрах, возвращаемых значениях и дополнительных примерах см. 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
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-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73d7eab6137c865a86befc6e7617756bff673cefe5fab6f7eb86f0061cd3bc23
|
|
| MD5 |
a4d3b06215bff639d88d695f00174c00
|
|
| BLAKE2b-256 |
46dad6c366595708e456f265c4e143830bf391998f2f6eb4f169fa44881afb8e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36ce00a06ff2f586381e8098c7f0008e4d97f6aafd6a206c6ae02e4c7758ebcf
|
|
| MD5 |
2449a9ddf3ba7e9e2221e7fdaa989f49
|
|
| BLAKE2b-256 |
23ba99649b0053a7a5f7143dd1c77748c0a9c14714d915e8f191998708386e08
|