nspd-request 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nspd_request-1.0.0/LICENSE +21 -0
- nspd_request-1.0.0/MANIFEST.in +23 -0
- nspd_request-1.0.0/PKG-INFO +366 -0
- nspd_request-1.0.0/README.md +323 -0
- nspd_request-1.0.0/nspd_request/__init__.py +13 -0
- nspd_request-1.0.0/nspd_request/nspd_request.py +516 -0
- nspd_request-1.0.0/nspd_request/version.py +4 -0
- nspd_request-1.0.0/nspd_request.egg-info/PKG-INFO +366 -0
- nspd_request-1.0.0/nspd_request.egg-info/SOURCES.txt +15 -0
- nspd_request-1.0.0/nspd_request.egg-info/dependency_links.txt +1 -0
- nspd_request-1.0.0/nspd_request.egg-info/not-zip-safe +1 -0
- nspd_request-1.0.0/nspd_request.egg-info/requires.txt +9 -0
- nspd_request-1.0.0/nspd_request.egg-info/top_level.txt +1 -0
- nspd_request-1.0.0/pyproject.toml +69 -0
- nspd_request-1.0.0/requirements.txt +2 -0
- nspd_request-1.0.0/setup.cfg +4 -0
- nspd_request-1.0.0/setup.py +51 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Konstantin Telenkov
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Включаем важные файлы в дистрибутив
|
|
2
|
+
include README.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
include requirements.txt
|
|
5
|
+
include pyproject.toml
|
|
6
|
+
include setup.py
|
|
7
|
+
|
|
8
|
+
# Включаем все Python файлы в пакете
|
|
9
|
+
recursive-include nspd_request *.py
|
|
10
|
+
|
|
11
|
+
# Исключаем ненужные файлы
|
|
12
|
+
exclude .gitignore
|
|
13
|
+
exclude .pypirc
|
|
14
|
+
exclude demo.py
|
|
15
|
+
exclude test_*.py
|
|
16
|
+
exclude *test*.py
|
|
17
|
+
exclude .git/*
|
|
18
|
+
exclude __pycache__/*
|
|
19
|
+
exclude *.pyc
|
|
20
|
+
exclude *.pyo
|
|
21
|
+
exclude *.pyd
|
|
22
|
+
exclude .DS_Store
|
|
23
|
+
exclude Thumbs.db
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nspd-request
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Python-библиотека для работы с НСПД (Национальная система пространственных данных)
|
|
5
|
+
Home-page: https://github.com/Logar1t/NSPD-request
|
|
6
|
+
Author: Logar1t
|
|
7
|
+
Author-email: Logar1t <logar1t.official@gmail.com>
|
|
8
|
+
Maintainer-email: Logar1t <logar1t.official@gmail.com>
|
|
9
|
+
License: MIT
|
|
10
|
+
Project-URL: Homepage, https://github.com/Logar1t/NSPD-request
|
|
11
|
+
Project-URL: Repository, https://github.com/Logar1t/NSPD-request
|
|
12
|
+
Project-URL: Issues, https://github.com/Logar1t/NSPD-request/issues
|
|
13
|
+
Project-URL: Documentation, https://github.com/Logar1t/NSPD-request#readme
|
|
14
|
+
Keywords: nspd,кадастр,недвижимость,api,росреестр
|
|
15
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
27
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
28
|
+
Requires-Python: >=3.8
|
|
29
|
+
Description-Content-Type: text/markdown
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Dist: requests>=2.25.1
|
|
32
|
+
Requires-Dist: pyproj>=3.0.0
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: pytest>=6.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-cov>=2.0; extra == "dev"
|
|
36
|
+
Requires-Dist: black>=21.0; extra == "dev"
|
|
37
|
+
Requires-Dist: flake8>=3.8; extra == "dev"
|
|
38
|
+
Requires-Dist: mypy>=0.800; extra == "dev"
|
|
39
|
+
Dynamic: author
|
|
40
|
+
Dynamic: home-page
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
Dynamic: requires-python
|
|
43
|
+
|
|
44
|
+
# NSPD Request
|
|
45
|
+
|
|
46
|
+
[](https://github.com/Logar1t/NSPD-request)
|
|
47
|
+
[](https://github.com/Logar1t/NSPD-request)
|
|
48
|
+
|
|
49
|
+
Python-библиотека для работы с НСПД (Национальная система пространственных данных). Предоставляет упрощенные функции для получения данных по кадастровым номерам и геометриям объектов недвижимости.
|
|
50
|
+
|
|
51
|
+
⚠️ **Важно**
|
|
52
|
+
|
|
53
|
+
Данная библиотека является неофициальным проектом и создана исключительно в образовательных целях
|
|
54
|
+
|
|
55
|
+
## Установка
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install nspd-request
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Или из исходников:
|
|
62
|
+
```bash
|
|
63
|
+
git clone https://github.com/Logar1t/NSPD-request.git
|
|
64
|
+
cd NSPD-request
|
|
65
|
+
pip install -r requirements.txt
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Быстрый старт
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
from nspd_request import NSPD
|
|
72
|
+
|
|
73
|
+
# Создаем экземпляр API
|
|
74
|
+
api = NSPD()
|
|
75
|
+
|
|
76
|
+
# Получение geom_id
|
|
77
|
+
geom_id = api.get_geom_id("77:03:0002007:7190")
|
|
78
|
+
print(f"geom_id: {geom_id}")
|
|
79
|
+
|
|
80
|
+
# Определение типа объекта
|
|
81
|
+
obj_type = api.get_object_type("77:03:0002007:7190")
|
|
82
|
+
print(f"Тип: {obj_type}")
|
|
83
|
+
|
|
84
|
+
# Получение связанных объектов
|
|
85
|
+
related = api.get_related("77:03:0002007:7190")
|
|
86
|
+
print(f"Связанных объектов: {len(related['related'])}")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Основные функции
|
|
90
|
+
|
|
91
|
+
### 1. Получение geom_id
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from nspd_request import NSPD
|
|
95
|
+
|
|
96
|
+
api = NSPD()
|
|
97
|
+
|
|
98
|
+
# Получение geom_id по кадастровому номеру
|
|
99
|
+
geom_id = api.get_geom_id("77:03:0002007:7190")
|
|
100
|
+
print(f"geom_id: {geom_id}") # 426710013
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Параметры:**
|
|
104
|
+
- `kad_number` (str): Кадастровый номер
|
|
105
|
+
|
|
106
|
+
**Возвращает:**
|
|
107
|
+
- `str` или `None`: geom_id или None в случае ошибки
|
|
108
|
+
|
|
109
|
+
### 2. Определение типа объекта
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from nspd_request import NSPD
|
|
113
|
+
|
|
114
|
+
api = NSPD()
|
|
115
|
+
|
|
116
|
+
# Определение типа объекта (ЗУ или ОКС)
|
|
117
|
+
obj_type = api.get_object_type("77:03:0002007:7190")
|
|
118
|
+
print(f"Тип: {obj_type}") # ЗУ
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Параметры:**
|
|
122
|
+
- `kad_number` (str): Кадастровый номер
|
|
123
|
+
|
|
124
|
+
**Возвращает:**
|
|
125
|
+
- `str` или `None`: "ЗУ", "ОКС" или None в случае ошибки
|
|
126
|
+
|
|
127
|
+
**Принцип работы:**
|
|
128
|
+
- Сначала определяет по `categoryId` из `meta` (36368 = ЗУ, 36369 = ОКС)
|
|
129
|
+
- Если не удалось, анализирует связи с другими объектами
|
|
130
|
+
|
|
131
|
+
### 3. Получение связанных объектов
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
from nspd_request import NSPD
|
|
135
|
+
|
|
136
|
+
api = NSPD()
|
|
137
|
+
|
|
138
|
+
# Получение связанных объектов
|
|
139
|
+
related = api.get_related("77:03:0002007:7190")
|
|
140
|
+
print(f"Тип: {related['type']}") # ЗУ
|
|
141
|
+
print(f"Связанных: {len(related['related'])}") # 4
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Параметры:**
|
|
145
|
+
- `kad_number` (str): Кадастровый номер
|
|
146
|
+
- `debug` (bool): Включить отладочную информацию (по умолчанию False)
|
|
147
|
+
|
|
148
|
+
**Возвращает:**
|
|
149
|
+
- `dict`: Словарь с информацией:
|
|
150
|
+
- `data`: Полные данные объекта из НСПД
|
|
151
|
+
- `geom_id`: Извлеченный ID геометрии
|
|
152
|
+
- `type`: Определенный тип объекта ("ЗУ" или "ОКС")
|
|
153
|
+
- `related`: Список связанных объектов
|
|
154
|
+
- `error`: Сообщение об ошибке (если есть)
|
|
155
|
+
|
|
156
|
+
### 4. Получение списка ЗУ по geomId ОКС
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
from nspd_request import NSPD
|
|
160
|
+
|
|
161
|
+
api = NSPD()
|
|
162
|
+
|
|
163
|
+
# Получение списка ЗУ по geomId ОКС
|
|
164
|
+
zu_list = api.get_zu_by_oks("108123297")
|
|
165
|
+
print(f"Найдено ЗУ: {len(zu_list)}") # 1
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Параметры:**
|
|
169
|
+
- `geom_id` (str): ID геометрии ОКС
|
|
170
|
+
- `debug` (bool): Включить отладочную информацию (по умолчанию False)
|
|
171
|
+
|
|
172
|
+
**Возвращает:**
|
|
173
|
+
- `list` или `None`: Список ЗУ или None в случае ошибки
|
|
174
|
+
|
|
175
|
+
### 5. Получение списка ОКС по geomId ЗУ
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
from nspd_request import NSPD
|
|
179
|
+
|
|
180
|
+
api = NSPD()
|
|
181
|
+
|
|
182
|
+
# Получение списка ОКС по geomId ЗУ
|
|
183
|
+
oks_list = api.get_oks_by_zu("426710013")
|
|
184
|
+
print(f"Найдено ОКС: {len(oks_list)}") # 4
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Параметры:**
|
|
188
|
+
- `geom_id` (str): ID геометрии ЗУ
|
|
189
|
+
- `debug` (bool): Включить отладочную информацию (по умолчанию False)
|
|
190
|
+
|
|
191
|
+
**Возвращает:**
|
|
192
|
+
- `list` или `None`: Список ОКС или None в случае ошибки
|
|
193
|
+
|
|
194
|
+
### 6. Универсальная функция get_info()
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
from nspd_request import NSPD
|
|
198
|
+
|
|
199
|
+
api = NSPD()
|
|
200
|
+
|
|
201
|
+
# Только базовые данные
|
|
202
|
+
data = api.get_info("77:03:0002007:7190")
|
|
203
|
+
|
|
204
|
+
# С дополнительным geom_id
|
|
205
|
+
data = api.get_info("77:03:0002007:7190", include_geom_id=True)
|
|
206
|
+
|
|
207
|
+
# С дополнительным object_type
|
|
208
|
+
data = api.get_info("77:03:0002007:7190", include_object_type=True)
|
|
209
|
+
|
|
210
|
+
# С обоими дополнительными полями
|
|
211
|
+
data = api.get_info("77:03:0002007:7190", include_geom_id=True, include_object_type=True)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Параметры:**
|
|
215
|
+
- `kad_number` (str): Кадастровый номер
|
|
216
|
+
- `include_geom_id` (bool): Дополнительно включить geom_id в результат
|
|
217
|
+
- `include_object_type` (bool): Дополнительно включить object_type в результат
|
|
218
|
+
|
|
219
|
+
**Возвращает:**
|
|
220
|
+
- `dict`: Словарь с данными и дополнительными полями (если запрошены)
|
|
221
|
+
|
|
222
|
+
**Преимущества:**
|
|
223
|
+
- По умолчанию возвращает все данные из НСПД
|
|
224
|
+
- Можно настроить дополнительные поля через параметры
|
|
225
|
+
- Эффективнее чем несколько отдельных запросов
|
|
226
|
+
|
|
227
|
+
### 7. Получение ЗУ по координатам
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
from nspd_request import NSPD
|
|
231
|
+
|
|
232
|
+
api = NSPD()
|
|
233
|
+
|
|
234
|
+
# Получение ЗУ по координатам (широта, долгота)
|
|
235
|
+
kad_number = api.get_zu_by_coordinates(55.811978, 37.498339)
|
|
236
|
+
print(f"Найден ЗУ: {kad_number}") # 77:09:0004001:8
|
|
237
|
+
|
|
238
|
+
# С настройкой размера области поиска
|
|
239
|
+
kad_number = api.get_zu_by_coordinates(55.7558, 37.6176, bbox_size=0.1)
|
|
240
|
+
print(f"Найден ЗУ: {kad_number}")
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Параметры:**
|
|
244
|
+
- `latitude` (float): Широта в градусах (WGS84)
|
|
245
|
+
- `longitude` (float): Долгота в градусах (WGS84)
|
|
246
|
+
- `bbox_size` (float): Размер области поиска в метрах (по умолчанию 0.05)
|
|
247
|
+
|
|
248
|
+
**Возвращает:**
|
|
249
|
+
- `str` или `None`: Кадастровый номер ЗУ или None в случае ошибки
|
|
250
|
+
|
|
251
|
+
**Особенности:**
|
|
252
|
+
- Автоматически преобразует координаты из WGS84 в EPSG:3857
|
|
253
|
+
- Создает BBOX для поиска в указанной области
|
|
254
|
+
- Возвращает первый найденный ЗУ в области
|
|
255
|
+
- Можно настроить размер области поиска через `bbox_size`
|
|
256
|
+
|
|
257
|
+
## Полный рабочий процесс
|
|
258
|
+
|
|
259
|
+
### Простой способ (рекомендуется)
|
|
260
|
+
|
|
261
|
+
```python
|
|
262
|
+
from nspd_request import NSPD
|
|
263
|
+
|
|
264
|
+
api = NSPD()
|
|
265
|
+
|
|
266
|
+
# Одна функция делает все автоматически!
|
|
267
|
+
result = api.get_related("77:03:0002007:7190")
|
|
268
|
+
|
|
269
|
+
if result["error"]:
|
|
270
|
+
print(f"Ошибка: {result['error']}")
|
|
271
|
+
else:
|
|
272
|
+
print(f"Тип объекта: {result['type']}")
|
|
273
|
+
print(f"geomId: {result['geom_id']}")
|
|
274
|
+
print(f"Связанные объекты ({len(result['related'])}):")
|
|
275
|
+
|
|
276
|
+
for i, obj in enumerate(result['related'], 1):
|
|
277
|
+
print(f" {i}. {obj}")
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Пошаговый способ
|
|
281
|
+
|
|
282
|
+
```python
|
|
283
|
+
from nspd_request import NSPD
|
|
284
|
+
|
|
285
|
+
api = NSPD()
|
|
286
|
+
kad_number = "77:03:0002007:7190"
|
|
287
|
+
|
|
288
|
+
# 1. Получаем geom_id
|
|
289
|
+
geom_id = api.get_geom_id(kad_number)
|
|
290
|
+
print(f"geom_id: {geom_id}")
|
|
291
|
+
|
|
292
|
+
# 2. Определяем тип объекта
|
|
293
|
+
obj_type = api.get_object_type(kad_number)
|
|
294
|
+
print(f"Тип: {obj_type}")
|
|
295
|
+
|
|
296
|
+
# 3. Получаем связанные объекты
|
|
297
|
+
if obj_type == "ЗУ":
|
|
298
|
+
oks_list = api.get_oks_by_zu(geom_id)
|
|
299
|
+
print(f"Найдено ОКС: {len(oks_list) if oks_list else 0}")
|
|
300
|
+
elif obj_type == "ОКС":
|
|
301
|
+
zu_list = api.get_zu_by_oks(geom_id)
|
|
302
|
+
print(f"Найдено ЗУ: {len(zu_list) if zu_list else 0}")
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Обработка ошибок
|
|
306
|
+
|
|
307
|
+
Все функции возвращают понятные сообщения об ошибках:
|
|
308
|
+
|
|
309
|
+
```python
|
|
310
|
+
from nspd_request import NSPD
|
|
311
|
+
|
|
312
|
+
api = NSPD()
|
|
313
|
+
|
|
314
|
+
# Проверка ошибок для получения geom_id
|
|
315
|
+
geom_id = api.get_geom_id("неверный_номер")
|
|
316
|
+
if geom_id is None:
|
|
317
|
+
print("Ошибка при получении geom_id")
|
|
318
|
+
|
|
319
|
+
# Проверка ошибок для определения типа объекта
|
|
320
|
+
obj_type = api.get_object_type("неверный_номер")
|
|
321
|
+
if obj_type is None:
|
|
322
|
+
print("Ошибка при определении типа объекта")
|
|
323
|
+
|
|
324
|
+
# Проверка ошибок для получения связанных объектов
|
|
325
|
+
related = api.get_related("неверный_номер")
|
|
326
|
+
if related.get("error"):
|
|
327
|
+
print(f"Ошибка: {related['error']}")
|
|
328
|
+
|
|
329
|
+
# Проверка ошибок для получения списков
|
|
330
|
+
zu_list = api.get_zu_by_oks("неверный_id")
|
|
331
|
+
if zu_list is None:
|
|
332
|
+
print("Ошибка при получении списка ЗУ")
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Примеры использования
|
|
336
|
+
|
|
337
|
+
Запустите файл для просмотра всех примеров:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
python demo.py
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Демонстрация включает:
|
|
344
|
+
1. Получение geom_id по кадастровому номеру
|
|
345
|
+
2. Определение типа объекта (ЗУ/ОКС)
|
|
346
|
+
3. Получение связанных объектов
|
|
347
|
+
4. Универсальная функция get_info() с настройками
|
|
348
|
+
5. Сравнение способов получения данных
|
|
349
|
+
6. Демонстрация оптимизации
|
|
350
|
+
7. Обработка ошибок
|
|
351
|
+
8. **Поиск ЗУ по координатам**
|
|
352
|
+
9. Тестирование производительности
|
|
353
|
+
|
|
354
|
+
## Требования
|
|
355
|
+
|
|
356
|
+
- Python 3.12+
|
|
357
|
+
- requests
|
|
358
|
+
- pyproj (для работы с координатами)
|
|
359
|
+
|
|
360
|
+
## Поддержка проекта
|
|
361
|
+
|
|
362
|
+
Самый простой способ - это оставить ⭐ проекту на [GitHub](https://github.com/Logar1t/NSPD-request) и отправить его своим коллегам.
|
|
363
|
+
|
|
364
|
+
## Лицензия
|
|
365
|
+
|
|
366
|
+
Библиотека создана для работы с открытым API НСПД.
|