geopandas
GeoPandas — skill K-Dense для Python-задач, где используются GeoSeries, GeoDataFrame, пространственные операции или импорт и экспорт векторных данных. Источник фиксирует конкретную целевую версию GeoPandas 1.1.4, а не unreleased 1.2. Для воспроизводимой среды указаны Python 3.10+, NumPy 1.24+, pandas 2.0+, Shapely 2.0+, pyproj 3.5+, pyogrio 0.7.2+ и packaging; пример smoke-tested окружения использует Python 3.12, uv и pinned версии пакетов. Бинарные геопакеты не следует смешивать между несовместимыми каналами, а дополнительные plotting и PostGIS зависимости нужно закреплять в lock-файле. Навык начинает анализ с происхождения данных. Перед расчётом фиксируются исходный слой, стабильный feature key, дубликаты идентификаторов, число строк, geometry column, драйвер и content hash. Отдельно считаются null, empty, invalid, mixed, Z/M и collapsed geometry: None означает отсутствие, а пустая Shapely-геометрия остаётся реальным объектом. Любой производный файл должен сохранять версии источников, CRS, параметры операции, predicate, cardinality join, решения по precision и количество строк. Это превращает карту или таблицу в проверяемый результат, а не в непрозрачный экспорт. CRS — часть смысла вычисления. set_crs только назначает metadata, to_crs преобразует координаты; CRS нельзя угадывать по диапазону координат. GeoPandas плоский, поэтому широту и долготу нельзя напрямую использовать для buffer, distance, area, nearest join, precision grid или tolerance: сначала выбирают оправданную локальную или equal-area проекцию либо геодезический метод. Для массивов координат нужен Transformer с always_xy=True. Линии, пересекающие ±180° или границу проекции, сначала обнаруживаются, затем split/unwrap и densify выполняются в документированном представлении, после чего результат валидируется. Web Mercator не считается универсальной измерительной CRS. Для структуры данных активной является только active geometry column; остальные geometry columns всё равно имеют собственный CRS. Бинарные операции GeoSeries по умолчанию выравниваются по индексу, поэтому align=False допустим только после проверки порядка и длины. Дубликаты колонок и feature IDs нужно разрешить до join или экспорта. Перед repair проверяется is_valid и причина невалидности. make_valid может поменять тип и размерность, поэтому сохраняются исходные данные и сравниваются counts, area, types, empty и collapsed parts. set_precision работает в единицах CRS и может убрать вершины или схлопнуть объекты, а union_all с grid_size выбирается осознанно. Пространственные операции имеют конкретные семантики. В sjoin predicate направлен: within не равен contains, intersects включает касание границы, contains его исключает, covers включает. dwithin требует distance в единицах CRS, а sjoin_nearest возвращает все равностоящие совпадения и не имеет параметра k. overlay с make_valid может изменить типы; precision mismatch способен создать slivers, которые нельзя молча удалять. clip растворяет mask, rectangle clipping быстрее, но может дать грязный результат или потерять линию, схлопнувшуюся в точку. dissolve объединяет groupby.agg и union_all, поэтому агрегации и null group keys задаются явно. В I/O GeoPandas 1.x по умолчанию использует pyogrio, но фактические драйверы и их поведение зависят от GDAL. Для общего обмена предпочтителен локальный GeoPackage, для колонночной интероперабельности — WKB GeoParquet. Схема GeoParquet 1.0.0 стабильнее; native GeoArrow и bbox covering относятся к 1.1.0 и менее совместимы. Отсутствующий ключ crs означает OGC:CRS84, а явный crs: null — неизвестную CRS; эти случаи нельзя смешивать. Экспорт нужно переоткрыть и проверить. Для PostGIS используются параметризованный SQL и SQLAlchemy connection; if_exists=replace разрушителен, поэтому по умолчанию ожидается fail и транзакция. Migration checklist охватывает переход с GeoPandas 0.14 и старше: Shapely 1 и PyGEOS больше не являются базовым путём, Fiona заменён pyogrio, sjoin(op=...) заменяется predicate, query_bulk — query, unary_union — union_all, а устаревшие datasets и внутренние geopandas.io точки входа не используются. Для карт skill требует подписать единицы, метод классификации, missing data, denominator и дату; explore может раскрыть атрибуты в tooltip и обратиться к tile/CDN, поэтому для локального черновика применяются tiles=None, tooltip=False и popup=False. В репозитории есть локальные CLI для redacted inventory, плана reprojection, geometry validity, spatial join audit, export plan и checklist чувствительных координат. Они ограничивают файлы и число объектов, отклоняют network/archive paths, импортируют зависимости лениво и печатают JSON без координат и record identifiers. Ограничение навыка принципиально: он помогает построить воспроизводимую проверку planar vector data, но не угадывает CRS, не публикует точные адреса и не заменяет анализ качества исходного слоя, проверку лицензий или решение о приватности результата.
Для чего подходит
- Обработка GeoDataFrame и GeoSeries
- Проверка CRS и пространственных join
- Импорт и экспорт векторных форматов
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/K-Dense-AI/scientific-agent-skills/tree/main/skills/geopandas