The endpoint catalogue now comes from IDERA, and the OGC request layer follows the same rules as the ArgentinaGeoServices QGIS plugin, so both tools reach the same services in the same way.
argentum_organizations() returns a different
frame. category is replaced by level
and jurisdiction, and dependency,
updated, wcs_url and csw_url are
new. Full set: name, level,
jurisdiction, dependency,
organization, updated, wms_url,
wfs_url, wcs_url, csw_url.name changed value. It is now built
from the organization plus whatever identifies it, with repeats removed
- "IGN" rather than "Nacional - IGN",
"Municipalidad de Balcarce - Buenos Aires" rather than that
name repeated twice. Scripts holding a literal name need updating; a
near-match hint is offered on lookup failure. A CSV written for 2.0.0
and passed through options(argentum.catalog=) keeps its old
names.argentum_read_wms(format=) defaults to
NULL, meaning “negotiate from what the service advertises”,
instead of "image/png".xml2::xml_ns_strip(), which removes only default
namespaces. GeoServer answers <wfs:WFS_Capabilities>
with a prefix, so //FeatureType matched nothing and the
service looked as if it published no layers. All capability parsing now
matches on local names.inst/extdata/organizations.csv held only a header row, so
the documented offline fallback returned zero organizations. It is
regenerated from IDERA, and an empty snapshot now raises an error
instead of quietly returning nothing.sub("\\?.*$", ""), which also discarded
MapServer’s map= parameter and any access token, breaking
those services outright. Only OGC operation parameters are removed now.
This matters: 59 of the 142 WFS URLs in the catalogue arrive carrying
service=/version=/request= copied
from a GetCapabilities, and leaving them in produced “invalid layer”
with no explanation.arg_inform() did not pass .envir to cli, so
argentum_search_organizations() failed with “object
'pattern' not found” instead of reporting that nothing matched.[WFS] tags, parenthesised comments,
placeholders such as “No service available”, and invisible characters
(NBSP, zero-width space, BOM) that made requests resolve against a
domain that does not exist. A URL broken in half by a stray space is
discarded rather than guessed at, because gluing the pieces back
together invents host names.argentum_read_wfs(crs = NULL) picks from the CRSs the layer
declares, preferring EPSG:4326, then 3857, 900913 and 22185. URN and
OGC-http CRS identifiers are normalised to EPSG:code. If
the layer declares nothing, the server’s default is used rather than an
invented one.GetMap formats the service advertises, and a CRS the layer
does not publish is refused with the list of ones that would work,
instead of returning a blank tile.argentum_help() prints a guided, copy-pasteable tour at
the console - getting started, the catalogue, layers, downloading, WMS
and options - in Spanish by default and English via
lang = "en".<!ENTITY are rejected,
responses are capped at 64 MiB, and the parser options are pinned
(NONET, never NOENT or HUGE).
Neither XXE nor billion laughs works against xml2’s defaults; the
hardening makes that explicit and tested instead of inherited.A rewrite of the internals. Every 1.x function still works but now
warns; see vignette("migrating-to-2-0").
argentum_organizations() returns lower-case column
names (name, category,
organization, wms_url, wfs_url).
The deprecated argentum_list_organizations() still returns
the old Name/WMS_URL/ WFS_URL
spelling.argentum_read_wms() issues a GetMap request
and returns a georeferenced terra::SpatRaster;
argentum_wms_legend() fetches the matching legend. Version
1 advertised WMS support and collected WMS_URL, but no
function ever used it.argentum_read_wfs() replaces
argentum_import_wfs_layer() and adds server-side
bbox filtering, CQL filter=, crs=
reprojection, max_features=, and automatic pagination for
layers larger than one response.argentum_cache_path(). argentum_cache_clear()
empties it, options(argentum.cache_ttl=) tunes it.argentum_capabilities() returns a printable object
carrying the service, the negotiated version and the endpoint.argentum_search_organizations() filters the catalogue
by regular expression.argentum_browse() unifies the two 1.x interactive
helpers and handles WMS.argentum.timeout, argentum.max_tries,
argentum.page_size, argentum.cache_ttl,
argentum.catalog, argentum.quiet.argentum_download_layers() recorded no failures. Its
tryCatch() handler assigned to result$status
inside the handler’s own frame, so the modification was made to a copy
and discarded. Failed layers were reported as "pending" and
the closing summary counted zero errors.
argentum_download() captures the outcome in the calling
frame.clean_url() was dead code.
argentum_list_organizations() defined a local function of
the same name that shadowed it, so the exported and documented version
never ran.ServiceExceptionReport with
HTTP 200 are now detected and reported, instead of being handed to
sf as if they were data.rbind() in a loop.make.names(),
which turned ign:provincia into
ign.provincia.argentum_error_http, argentum_error_offline,
argentum_error_ogc, and others), so callers can handle them
selectively.pkgdown workflow was malformed YAML —
branches, jobs and steps were
indented at the wrong level, so it had never run. It is fixed, and
joined by R-CMD-check (Ubuntu, macOS, Windows; release,
devel, oldrel) and test coverage..RData, .Rhistory and
.Rproj.user/ are no longer committed.news.md renamed to NEWS.md and removed
from .Rbuildignore, so it appears on the pkgdown site and
in the CRAN listing.httptest2.argentum_download_layers(): new function to download
layers.