$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.