Skip to contents

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.

Find data

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 stpete-parks             St. Petersburg parks   stpete       checked          
#> 3 clearwater-park-buffers  Clearwater park buffe… clearwater   checked          
#> 4 hillsborough-parks       Hillsborough County p… hillsborough checked          
#> 5 pinellas-park-boundaries Pinellas County park … pinellas     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"

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.

Retrieve records

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)

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.

Work with spatial data

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)$epsg

The retrieval article maps this layer and describes filters, integrity checks, data types, and downloads.

Trace the source

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")

The coverage article covers source limits, attribution, and citation. A retrieved layer is not necessarily a complete historical record or a legal boundary.