$block_summary(), $block_pois(), $point_summary(),
$point_pois(), and $poi_catchment() now accept many origins in one
request: pass a vector of GEOIDs (or dest_ids), or equal-length lat / lon
vectors, and the whole set is queried in a single call — one request against
the 300/minute rate limit instead of one per origin. Results come back as a
flat data frame tagged by origin (geoid, or origin_lat / origin_lon, or
dest_id); per-origin errors and any truncated origins ride on the frame's
attributes. A batch is charged only for what the account can pay for, so a huge
query stops at the balance rather than overspending.$place_boundary() — the boundary polygon of a census place, as a one-row sf.
Free (no API key); handy as a boundary layer for close_map().close_map() gains layered context and smarter defaults: it auto-zooms to the
data, shows every attribute on hover, defaults to the ColorBrewer YlGnBu
scale (blue = most accessible), and takes a boundary outline and
semi-transparent background layers (e.g. a city boundary, commute isochrones,
or a walkshed under its POIs). A mark argument drops an X on a point of
interest (e.g. a starting point).$place_pois() — every point of interest within a census place (city or
town), by place GEOID. The place analog of $pois_search(); pass type to
get, e.g., all supermarkets in a city.close_map() — a one-line interactive map (CARTO Positron basemap, hoverable
points, or filled blocks that highlight the features meeting a criterion) for
the sf objects the client returns. Built on plotly (a Suggests dependency),
so it needs no GDAL beyond what sf already uses.$places() results now carry a state column (two-letter USPS abbreviation),
so same-named places are distinguishable.close_client() reads the CLOSECITY_KEY environment variable when no
api_key is given. A 401 with no key set carries an actionable hint pointing
at CLOSECITY_KEY and the free-signup page.$pois_search(), $block_pois(), $point_pois(),
$poi_catchment(), $blocks_query(), $place_blocks()) read every page by
default, matching the Python client. Pass paginate = FALSE for the first page
only, or an explicit cursor for a single page. $records() is kept as an
equivalent explicit form.e$retry_after seconds and retry the request yourself.Tabular results by default, across every route.
output argument replaces spatial: close_client(output = "spatial")
(the default) returns an sf object where geometry applies and a plain data
frame for catalog and summary routes; output = "tabular" returns a data frame
for every route and never downloads block boundaries (the cheap path when you
only want the numbers); output = "raw" returns the close_reply. Set it on
the client or per call.$modes(), $destination_types(), $vintage(), $places())
and the block and point summaries now return data frames. $block_summary() /
$point_summary() broadcast the origin GEOID to a geoid column, and
$isochrone(format = "blocks") now converts too.block_geoid, assumptions, ...)
are attached as attributes on the returned frame.close_as_df() and an as.data.frame() method for close_reply, beside
the existing close_as_sf().First public release of the closecity R client for the Close API
(api.close.city).
close_client(), with one method per public route: catalog,
place lookup, block and point summaries and POIs, POI search, detail, and
catchment, areal block queries, and isochrones.sf objects by default. Set spatial = FALSE to work
with the raw reply. Block boundaries are joined with tigris.tokens_charged, tokens_remaining), ETag/304
conditional requests, keyset pagination via $records(), and typed RFC 9457
errors as classed conditions.$places() looks up a city or town by name and returns its GEOID and centre.