Skip to main content

geophis

Librería SIG Wrapper en español sobre geopandas y shapely (vector), rasterio, pysheds, scipy y scikit-image (raster). Una función clara por operación SIG, en lugar de repetir la sintaxis de cada librería en cada script

Logo de geophis

Versión: 1.0.0 | Python: >= 3.11 (probado en 3.14) | Licencia: GPL-3.0-or-later

Para qué sirve

geophis existe para que un script SIG se lea como la tarea que hace: cargar, recortar, interpolar_mde, calcular_pendiente, guardar. Está pensado para el trabajo técnico forestal y territorial que termina en un entregable (shapefiles, rásters y cifras de superficie para una memoria técnica), donde cada número tiene que poder justificarse

Scripts hechos con IA

La librería está documentada para que una IA escriba los scripts por ti. docs/GEOPHIS.md trae todas las funciones con su firma y sus trampas, más las reglas de trabajo, y basta con cargarlo como contexto:

  1. Crea un Proyecto en Claude (o el asistente que uses) y sube docs/GEOPHIS.md como contexto del proyecto
  2. Pide la tarea en lenguaje normal: "recorta las curvas al predio, saca el MDE a 5 m y clasifica la pendiente en tres rangos"
  3. Corre el script que te devuelve: python mi_script.py
  4. Pega la salida de consola completa en la conversación. Los avisos de la librería salen por consola, y es lo que la IA necesita para corregir

Con Claude Code, u otro agente que ejecute código, los pasos 3 y 4 los hace el agente: escribe el script, lo corre y lee la salida él mismo

Instalación

Requiere Python >= 3.11

pip install geophis

La última versión de GitHub, antes de que llegue a PyPI:

pip install git+https://github.com/antruc/geophis.git

Instalación local, para editar la librería o correr los tests:

git clone https://github.com/antruc/geophis.git
cd geophis
pip install -e ".[dev]"   # -e: los cambios en src/ se ven sin reinstalar; [dev] suma pytest y ruff

Depende de geopandas >= 1.1, shapely >= 2.1, pandas, numpy, rasterio, scipy, threadpoolctl, contourpy, pysheds, scikit-image y openpyxl; pip las instala solas

Ejemplo básico

import geophis as geo

predio = geo.cargar("predio.shp")
predio = geo.reproyectar(predio, 32613)                     # UTM 13N: distancias en metros
predio = geo.calcular_superficie(predio, campo="SUP")       # hectáreas por polígono
print(geo.superficie_total_ha(predio), "ha")
geo.guardar(predio, "predio_utm.shp")

Un paso más, del predio y sus curvas de nivel a un ráster de pendiente:

curvas = geo.cargar("curvas.shp")
mde, tf = geo.interpolar_mde(geo.recortar(curvas, predio), "COTA", resolucion=5)
pendiente = geo.calcular_pendiente(mde, tf)

Scripts completos en ejemplos/

Qué hace

Cubre el pipeline de entregables, no el lienzo de un SIG de escritorio:

  • Vector: cargar y guardar entre .shp, .gpkg, .geojson, .gpx, .kml, .kmz, CSV y Excel; recortar, disolver, zona de influencia, fusionar, solapes y prioridad entre capas, superficies y longitudes; ruta más rápida e isócronas sobre una red de calles o caminos (OSM incluido), con sentidos únicos
  • Ráster: recorte, remuestreo, reproyección, MDE desde curvas de nivel, pendiente y aspecto, reclasificación por rangos, sieve, poligonización, índices de vegetación, mosaico de teselas, ruta a pie más rápida sobre el MDE y ruta de costo mínimo
  • Imagen: Sentinel-2 L2A del predio por Earth Search, sin cuenta ni token: la mejor fecha limpia, varias teselas en un mosaico y la cita obligatoria
  • Tabla de atributos: seleccionar por atributo o por ubicación, resumir, unir una planilla, crear, calcular, renombrar, borrar y cambiar el tipo de campos, crear una capa desde cero, ver el ancho de campo de un .shp, nombres y valores en mayúsculas o minúsculas
  • Hidrología: dirección y acumulación de flujo, red de drenaje, orden de cauces, cuencas y microcuencas
  • Parámetros con procedencia: cada número de una memoria técnica se mide o se declara con su razón, y la librería puede decir de dónde salió

No hace teledetección clasificada, ni geocodificación, ni se conecta con SIG de escritorio, ni dibuja mapas. No se conecta a servicios externos, salvo Earth Search para bajar Sentinel-2

Comando de consola

geophis predio.shp kmz     # convierte entre formatos, en lote
geophis ayuda

Convierte entre shp, gpkg, geojson, gpx, kml y kmz. CSV y Excel se leen y escriben desde Python, no desde la consola

Documentación

Archivo Para qué
docs/GEOPHIS.md La documentación completa: todas las funciones de __all__ con su firma y sus trampas, los flujos de MDE, pendientes e hidrología, y las instrucciones de trabajo. Es también el único archivo que hay que cargar en un Proyecto de Claude
docs/API.md Índice compacto para buscar una función por nombre
ejemplos/ Scripts completos: caminos.py (buffer jerárquico), hidrologia.py (buffer por condición), mde.py (curvas a MDE)

Estructura

src/geophis/      la librería (un módulo por capa; las dependencias solo bajan)
tests/           suite pytest
docs/            documentación
ejemplos/        scripts de referencia

Los módulos están en capas y las dependencias solo bajan: proyeccion y metrologia, luego archivo y raster, luego geometria, hidrologia, tabla y satelite, luego zonas, luego barridos, luego parametros, y arriba cli. tests/test_capas.py lo vigila. Los scripts de trabajo de cada predio no son parte de la librería: traen rutas absolutas y cifras de un predio

Tests

pytest                    # los 2 tests de red corren solo con GEOPHIS_RED=1
ruff check .              # lint
ruff format .             # formato (line-length 90, configurado en pyproject)

tests/test_docs.py comprueba que las firmas escritas en docs/GEOPHIS.md no se desfasen de las reales, que el índice de docs/API.md cubra toda la API, y que la cadena de pendientes documentada corra entera. tests/test_defectos.py fija uno a uno los defectos ya corregidos, tres de ellos de falla silenciosa

Convenciones

  • Wrapper delgado: una función = una operación de la librería base, con nombre simple en español
  • La lógica de dominio (claves de rodal, umbrales del predio) se queda en los scripts; la librería solo aporta operaciones SIG genéricas
  • Distancias y márgenes en unidades del CRS activo; usar UTM para metros. Lo que mide en metros sin decirlo en la firma falla con un CRS en grados o en pies. EPSG de trabajo típico: 32613 (UTM 13N)
  • Las funciones que devuelven capa trabajan sobre una copia y no mutan la entrada. Excepción: reproyectar devuelve la misma capa si ya está en el CRS pedido
  • recortar, intersecar, borrar y union_espacial alinean el CRS solos, reproyectando el segundo argumento. fusionar no lo hace, a propósito
  • Avisos y reportes por consola con print; los errores con raise ValueError de mensaje claro

El detalle de cada convención, con la medición que la justifica, está en docs/GEOPHIS.md

Metadata

Release files for geophis 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for geophis 1.0.0
File Size Uploaded
geophis-1.0.0.tar.gz 294.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for geophis 1.0.0
File Interpreter ABI Platform
geophis-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 495.6 kB

Release files / geophis-1.0.0.tar.gz

Download URL geophis-1.0.0.tar.gz
Size 294.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6d4f3939ccd86c63409458a4fb502690a3b4337e708b3d80c5838e1fcd86042f
BLAKE2b-256 checksum
How to use checksums
665fb85e13119684cdbe236cda2e4cdcfa546a349b58eb37bb2401151196dee6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / geophis-1.0.0-py3-none-any.whl

Download URL geophis-1.0.0-py3-none-any.whl
Size 200.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fa1fb7f7fbc249a549a22c01ffb5373bc70b2611d21e9f80f16a376c6a200001
BLAKE2b-256 checksum
How to use checksums
c009f682feba9accd0b433ca47b68791769d18075c84e6ca477ecfb75949a76e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page