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.3.0.tar.gz (110.4 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.0-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pynspd-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4b42f7a63065c6e1643a5f23608d2a60738b43e61d876bf5df70c3fedee05fda
MD5 f760850e805fdc96ae00a7b0cc4eda20
BLAKE2b-256 4e1fb3b3a26950ec3939e8a64ee49aa0773b3f3e3c0242400bd8a19b88f9e956

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for pynspd-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ac75e6b4bd5438be8ccee678b3aa99a9c757ce3a2ab197bdf161d94b1c092630
MD5 137b6260405e31f4053fbe75f6e0fec3
BLAKE2b-256 c9e3ad69574e4d24bc1c0ef4f74900e0d97b35c7416abcc6560fb9aedfb2c1c8

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