tampaBayOpenData
retrieves public ArcGIS data from six Tampa Bay publishers. It includes
52 checked layers in an offline catalog and can search the publishers’
live portals. Retrieval returns a tibble or, with sf
installed, a spatial object.
The offline catalog examples below run during the vignette build. Live discovery and retrieval examples are displayed but not run; try them in an internet-connected R session.
The checked catalog has stable package IDs and works offline:
library(tampaBayOpenData)
tampaBayOpenData::tbod_list_portals()[, c("id", "publisher", "jurisdiction")]
#> # A tibble: 6 × 3
#> id publisher jurisdiction
#> <chr> <chr> <chr>
#> 1 city City of Tampa tampa
#> 2 tbrpc Tampa Bay Regional Planning Council tampa-bay
#> 3 stpete City of St. Petersburg stpete
#> 4 clearwater City of Clearwater clearwater
#> 5 hillsborough Hillsborough County hillsborough
#> 6 pinellas Pinellas County pinellas
tampaBayOpenData::tbod_search_datasets("park", source = "checked")[,
c("id", "title", "jurisdiction", "validation_status")]
#> # A tibble: 6 × 4
#> id title jurisdiction validation_status
#> <chr> <chr> <chr> <chr>
#> 1 parks Park polygons tampa checked
#> 2 clearwater-park-buffers Clearwater park buffe… clearwater checked
#> 3 hillsborough-parks Hillsborough County p… hillsborough checked
#> 4 pinellas-park-boundaries Pinellas County park … pinellas checked
#> 5 stpete-parks St. Petersburg parks stpete checked
#> 6 pinellas-trail Pinellas Trail segmen… pinellas checked
tampaBayOpenData::tbod_dataset_info("construction-permits")[
c("title", "scope_note", "verified")]
#> $title
#> [1] "Permits (active GIS view)"
#>
#> $scope_note
#> [1] "The upstream service is described as data for an internal active-permits viewer, although its public Query endpoint is accessible without a token. The date fields are LASTUPDATE and CREATEDDATE; no permit issue-date field is advertised. No explicit dataset license was found on this exact FeatureServer service or in the selected public ArcGIS organization catalog. Do not infer the license of a separate MapServer layer."
#>
#> $verified
#> [1] "2026-09-29"The first table lists publishers; the second lists dataset layers,
not park records. Choose a dataset by its title and jurisdiction, then
read its scope_note to check whether it covers your
question.
tbod_dataset_info() reports a checked entry’s source,
terms, and scope. To look beyond the catalog, search the live
portals:
found <- tbod_search_datasets("housing", source = "live", portals = "city")
found[, c("id", "title", "publisher", "validation_status")]The default catalog search scans all six live publishers and includes
checked entries. Set portals to narrow the live scan;
matching checked entries still appear. Set jurisdiction to
filter both live and checked results. A discovered result
has not received the catalog’s source checks; inspect its metadata and
reuse terms before analysis. The discovery
article covers filters, scan limits, and ArcGIS sources outside the
bundled region.
Pass a checked ID, a discovered ID, or a one-row search result to
tbod_get_dataset(). If a checked ID is shared by multiple
jurisdictions, supply jurisdiction as well.
permits <- tbod_get_dataset(
"construction-permits",
where = "PROJECTSTATUS IS NOT NULL",
fields = c("RECORD_ID", "PROJECTSTATUS", "LASTUPDATE"),
limit = 100
)
head(permits)
sort(table(permits$PROJECTSTATUS), decreasing = TRUE)permits is a tibble, a data frame with a compact printed
display, containing active permit-viewer features. The sorted output
pairs each PROJECTSTATUS label with the number of returned
rows carrying it; use this to see which labels occur most often in your
preview.
The counts describe the retrieved subset. Omit limit to
retrieve all matching rows. Passing a discovery row keeps its source
information:
if (nrow(found)) {
housing <- tbod_get_dataset(found[1, ], limit = 100)
tbod_provenance(housing)[c("publisher", "validation_status", "complete")]
}Before retrieving a checked layer, the package compares its current
fields, geometry, and CRS with the bundled schema. Added fields warn;
incompatible changes stop retrieval. See
tbod_check_schema() and the retrieval article for the full drift
report.
Install the optional sf package and request
spatial = TRUE for an sf result.
out_sr = 4326 asks the service for WGS 84 coordinates;
without out_sr, the client keeps the native CRS.
projects <- tbod_get_dataset("development-cases", spatial = TRUE,
out_sr = 4326)
sf::st_crs(projects)$epsgAn sf result is still a table, with a geometry column
holding each feature’s location. The coordinate check should print
4326 after a successful request; this identifies the
longitude-latitude system, not a count of projects. Here the rows are
active development-case locations, not capital improvements.
The retrieval article maps this layer and describes filters, integrity checks, data types, and downloads.
tbod_provenance() records the source, query, retrieval
time, row counts, and completeness. Save it separately before
transformations that may discard attributes.
source <- tbod_provenance(projects)
saveRDS(list(data = projects, provenance = source),
"development-cases.rds")source is a named list describing the download, rather
than another table of cases. The saved file keeps that record alongside
the data so you can identify which source and retrieval date underlie a
later result.
The coverage article covers source limits, attribution, and citation. A retrieved layer is not necessarily a complete historical record or a legal boundary.