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:
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 semanaEsto 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.
Usar tu propio catálogo
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.
