Skip to contents

Los dos protocolos, y cuándo usar cada uno

WFS devuelve features: geometrías con atributos, que podés filtrar, unir, medir y reproyectar. Recibís un objeto sf. Es lo que querés cuando necesitás los datos.

WMS devuelve una imagen: el servidor dibuja el mapa con su propia cartografía y te manda píxeles. Recibís un terra::SpatRaster. Es lo que querés cuando necesitás un fondo, una ortofoto, o una capa que el organismo solo publica como imagen.

La mayoría de los organismos ofrece los dos. argentum_organizations() te dice cuáles.

Encontrar un endpoint

orgs <- argentum_organizations()
nrow(orgs)
head(orgs$name)

El catálogo queda cacheado, así que después de la primera llamada es instantáneo. Para buscar dentro:

argentum_search_organizations("catastro")
argentum_search_organizations("mendoza", service = "wms")

Todas las funciones de lectura aceptan tanto un name del catálogo como una URL suelta, así que nunca estás obligado a pasar por el catálogo:

ign <- "https://wms.ign.gob.ar/geoserver/ows"

Ver qué hay publicado

capas <- argentum_layers(ign)
capas[, c("name", "title", "crs")]

Vale la pena mirar la columna bbox antes de bajar nada: te dice si la capa cubre todo el país o una sola provincia, y eso cambia cómo conviene filtrar.

Leer datos vectoriales

El caso simple:

provincias <- argentum_read_wfs(ign, "ign:provincia")

El caso que vas a usar de verdad. Tres filtros, todos evaluados en el servidor, así que solo viaja por la red lo que coincide:

argentum_read_wfs(
  ign, "ign:provincia",
  bbox   = c(-59, -35, -57, -34),
  crs    = 4326,
  filter = "nam = 'Buenos Aires'"
)

bbox también acepta cualquier cosa que entienda sf::st_bbox(), que normalmente es más cómodo que tipear coordenadas:

area <- sf::read_sf("mi_area_de_estudio.gpkg")
argentum_read_wfs(ign, "ign:localidad", bbox = area)

Capas que no entran en una sola respuesta

Los servidores limitan cuántos features devuelven de una vez, y varios servidores argentinos lo limitan bastante bajo. argentum_read_wfs() pagina solo: pide getOption("argentum.page_size") features por vez y corta cuando el servidor devuelve una página corta.

Si un servidor puntual maneja mal startIndex —algunas versiones viejas de MapServer lo hacen— apagá la paginación y limitá el pedido:

argentum_read_wfs(ign, "ign:localidad", page_size = Inf, max_features = 1000)

Bajar a disco

reporte <- argentum_download(ign, dir = "datos/ign", format = "gpkg")

argentum_download() devuelve un reporte en vez de frenar en la primera falla, porque en una descarga masiva sobre infraestructura pública siempre falla alguna capa:

subset(reporte, status == "error")[, c("layer", "message")]

Usá "gpkg". Shapefile trunca los nombres de campo a diez caracteres, lo que destroza los nombres descriptivos en español que suelen usar estos servicios (departamento_partido queda en departame).

Cuando algo falla

Los errores son condiciones con clase, así que podés manejarlos selectivamente en vez de atrapar todo:

resultado <- tryCatch(
  argentum_read_wfs(ign, "ign:provincia"),
  argentum_error_offline = function(e) {
    message("Sin red; uso el extracto de anoche.")
    sf::read_sf("cache/provincias.gpkg")
  }
)

Las clases disponibles son argentum_error_offline, argentum_error_http, argentum_error_ogc (el servidor devolvió un ServiceExceptionReport), argentum_error_capabilities, argentum_error_read, argentum_error_unknown_org, argentum_error_no_endpoint y argentum_error_no_layers.

Caché

El catálogo y cada GetCapabilities quedan cacheados en memoria durante la sesión y en disco entre sesiones:

argentum_cache_path()
argentum_cache_clear()
options(argentum.cache_ttl = 60 * 60 * 24 * 7)  # una semana

Esto importa más de lo que parece. Un GetCapabilities contra un GeoServer grande puede tardar quince segundos, y lo necesitan tanto el listado de capas como cada lectura.

El catálogo que viene con el paquete es una foto de un momento. Si mantenés tu propia lista de endpoints —una IDE interna, o una versión corregida de la nuestra— apuntá el paquete ahí:

options(argentum.catalog = "endpoints.csv")

El archivo necesita las columnas level, jurisdiction, dependency, organization, updated, wms_url, wfs_url, wcs_url y csw_url. La columna name es opcional: si no está, el nombre se arma con el organismo y lo que lo identifique. Los archivos escritos para argentum 2.0.0, con category, organization, wms_url y wfs_url, se siguen leyendo y conservan sus nombres originales.

El catálogo que viene con el paquete sale de la planilla “Geoservicios_IDERA”, la misma fuente que lee el plugin ArgentinaGeoServices de QGIS, así que las dos herramientas ven los mismos endpoints.