Skip to main content

Python-библиотека для работы с https://nspd.gov.ru (ex-ПКК)

Project description

PyNSPD

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

PyPI - Python Version


⚠️ Важно

  • Это неофициальная библиотека
  • НСПД часто меняет схемы объектов. Если у вас происходит ошибка валидации - попробуйте обновить библиотеку

Особенности

  • Синхронное и асинхронное API: полностью идентичные API позволяют одинаково удобно работать как в старых синхронных, так и высокопроизводительных асинхронных проектах.
  • Полная типизации на Pydantic: удобная работа с ответами благодаря автозаполнениям от IDE.
  • Автогенерация типов: данные о перечне слоев, их полях и их типов подтягиваются напрямую с НСПД.
  • Встроенная поддержка shapely: удобная аналитика полученной геометрии.

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

Поиск ЗУ

from pynspd import AsyncNspd

async with AsyncNspd() as api:
    feat = await api.search_zu("77:05:0001005:19")

    # исходная геометрия - geojson в EPSG:3857
    print(feat.geometry.wkt)
    > 'POLYGON ((4188557.382334785 7502956.580842949...'
    # но можем легко конвертировать в shapely EPSG:4326
    print(feat.geometry.to_shape(epsg4326=True).wkt)
    > 'POLYGON ((37.626451149629915 55.72040614723934...'

    # Доступ ко всему переченю свойств объекта
    print(feat.properties.options.model_dump())
    > {'land_record_type': 'Земельный участок', ...}
    # А также форматирование свойств по примеру карточки с сайта
    print(feat.properties.options.model_dump_human_readable())
    > {'Вид объекта недвижимости': 'Земельный участок', ...}

Поиск типизированного объекта из любого слоя

from pynspd import AsyncNspd, NspdFeature

async with AsyncNspd() as api:
    # либо импортируем определение слоя, зная его id (с сайта)
    from pynspd.schemas import Layer37578Feature as lf_def
    # либо найти определение слоя по названию, 
    # но тогда объект будет типизирован частично
    lf_def = NspdFeature.by_title(
        "ЗОУИТ объектов энергетики, связи, транспорта"
    ) # IDE знает весь перечень слоев и подсказывает ввод
    feat = await api.search_by_model("Останкинская телебашня", lf_def)    

Поиск объекта с неизвестным слоем

async with AsyncNspd() as api:
    feat = await api.search_by_theme("77:02:0021001:5304")
    print(feat.properties.options.type)
    > 'Машино-место'

Поиск объекта в точке

from shapely import Point

async with AsyncNspd() as api:
    features = await api.search_zu_at_point(Point(37.546440653, 55.787139958))
    print features[0].properties.options.cad_num
    > "77:09:0005008:11446"

Поиск объектов в контуре

from shapely import wkt
async with AsyncNspd() as api:
    contour = wkt.loads(
        "Polygon ((37.62381 55.75345, 37.62577 55.75390, 37.62448 55.75278, 37.62381 55.75345))"
    )
    features = await api.search_zu_in_contour(contour)
    cns = [i.properties.options.cad_num for i in features]
    print(cns)
    > ["77:01:0001011:8", "77:01:0001011:14", "77:01:0001011:16"]

Установка

pip install pynspd

Зависимости

  • httpx - запросы к API НСПД
  • pydantic, geojson-pydantic - типизации проекта
  • pyproj, shapely - для конвертации geojson-геометрии в удобный для аналитики формат
  • mercantile - решение задач обратного геокодирования

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

pynspd-0.3.1.tar.gz (100.0 kB view details)

Uploaded Source

Built Distribution

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

pynspd-0.3.1-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

Details for the file pynspd-0.3.1.tar.gz.

File metadata

  • Download URL: pynspd-0.3.1.tar.gz
  • Upload date:
  • Size: 100.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.5

File hashes

Hashes for pynspd-0.3.1.tar.gz
Algorithm Hash digest
SHA256 c6f2c6e28ce751091003d09cf24c8732184973f6fb3c9a49c1ec9cbd069b0600
MD5 94a5f79366e59138ca0eebb8f3ae918e
BLAKE2b-256 5fa69dfc349dc04532302568efbe48676f72ea491373ce312a57247ef069a599

See more details on using hashes here.

File details

Details for the file pynspd-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: pynspd-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 29.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.5

File hashes

Hashes for pynspd-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c9f0de2212f607e763f4218553c9a8f736c6d7c7086ba84558970d8dcf335aa7
MD5 def57caee7e6bfa5a4bf2b73a18fa534
BLAKE2b-256 0120878f9a65a1fee27293b0da49802aa18de7bd85e4436041910d61fab957cf

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