Skip to main content

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

Project description

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

pynspd — Python-библиотека для работы с сайтом НСПД. Особенности:

  • Синхронное и асинхронное 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.2.0.tar.gz (109.6 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.2.0-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pynspd-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f1b0cd60f3ca64f32aba14f5a4b96213a8945288895d0877b681a5980ad41ebe
MD5 4eab5d76c794c581a46d67818744d092
BLAKE2b-256 9152485b5f6297b15689766c8bbce4ac915953fbd2b0794ab3cfb875d2dd724f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynspd-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cb0860a7eb2f16511c47ea7bb157d43c5435d10f8ba7bf79de4ba538f7aed2f2
MD5 5d33eb22af41532f7d15b6b6a12156c7
BLAKE2b-256 13204f8107fa4901ef425725dc6fe79188e5cac2fca4d31210c43728abf16d71

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