Skip to contents

A cleaned snapshot of the artificial reef deployments published by the Florida Fish and Wildlife Conservation Commission (FWC), one row per deployment. Every row FWC publishes is kept, including rows whose deployment date is only partly known.

Usage

reefs

Format

A data frame with 4,548 rows and 21 variables:

deploy_id

Character. FWC deployment identifier, unique across the file. A two-letter county prefix and a number, such as "BA0621".

county

Character. Florida county responsible for the reef site. 34 counties appear.

deploy_date

Date. Date of deployment, NA unless date_precision is "day".

date_precision

Factor with levels "day", "month", "year", "before", and "unknown". How much of the deployment date FWC recorded.

deploy_year

Integer. Year of deployment. NA when date_precision is "before" or "unknown".

deploy_month

Integer, 1 to 12. Month of deployment. NA unless date_precision is "day" or "month".

deploy_before

Integer. Year the deployment is known to predate. Set only when date_precision is "before".

deployment_name

Character. Name FWC gives the deployment, often a memorial name or the name of a scuttled vessel.

description

Character. Free-text description of the material placed, as recorded by FWC.

primary_material

Character. FWC's material description, left exactly as recorded. It is not a controlled vocabulary: roughly 1,500 distinct strings appear. Use material_category to group deployments.

material_category

Character. FWC's own grouping of the material into "Concrete", "Metal", "Module", "Other", "Rock", or "Vessel".

tons

Numeric. Tons of material deployed. NA where not recorded.

relief

Numeric. Vertical relief above the seafloor, in feet.

depth

Numeric. Water depth at the site, in feet.

jurisdiction

Character. "State" or "Federal" waters.

coast

Character. "Gulf" or "Atlantic".

lat_dm

Character. Latitude in degrees and decimal minutes, as published, such as "30° 06.466' N". This is the form marine chartplotters expect.

long_dm

Character. Longitude in degrees and decimal minutes, as published.

lat_dd

Numeric. Latitude in decimal degrees.

long_dd

Numeric. Longitude in decimal degrees, negative west of the prime meridian.

location_accuracy

Character. FWC's rating of positional accuracy: "High", "Medium", or "Low". Reef material can move, degrade, or become buried, and some historical positions have never been verified.

Source

Florida Fish and Wildlife Conservation Commission, Division of Marine Fisheries Management, Artificial Reef Program. Built from layer 12, Artificial Reef Locations in Florida, of https://gis.myfwc.com/mapping/rest/services/Open_Data/Artificial_Reef_Locations_in_Florida/MapServer, last edited 2026-05-13.

Details

FWC records deployment dates at four levels of precision, carried in date_precision, and leaves a fifth group undated. deploy_date is filled in only when the source gives a full calendar date; missing days and months are not invented. Use deploy_year, deploy_month, and deploy_before to work with the partial dates:

"day"

Full date. deploy_date, deploy_year, and deploy_month are all set. 4,226 rows.

"month"

Month and year known, day unknown. deploy_date is NA. 10 rows.

"year"

Year known only. deploy_date and deploy_month are NA. 269 rows.

"before"

Deployed at some point before a stated year, carried in deploy_before. All other date fields are NA. 26 rows.

"unknown"

No deployment date recorded at all. Every date field is NA. 17 rows, all of them early deployments that the printed FWC lists describe as "Pre-1970".

A tonnage of 0 in the source means "not recorded" rather than a zero-ton deployment, and is stored as NA. Large tonnages are real: they come from mitigation boulder fields, bridge demolitions, and scuttled ships.

relief and depth are in feet.

The date FWC last edited any record in this snapshot is stored on the data frame, so the vintage travels with the data: attr(reefs, "snapshot_date").

Source and cleaning

reefs is a cleaned copy of what the FWC feature service returns rather than a reworking of it. All 4,548 deployments are kept and no row is filtered. The build script is data-raw/reefs.R, which is not installed with the package; the download and the cleaning it calls are the same internal code fetch_reefs() uses, so the snapshot and a live fetch cannot drift apart.

The service publishes these fields: DeployID, County, DDate, DeployDate, Description, Name, MatDescrip, MatCat, Tonnage, Relief, Depth, Jurisdiction, Coast, Lat_DM, Long_DM, Lat_DD, Long_DD, and LocAccuracy, alongside internal identifiers and geometry that are not carried over.

Four changes are applied:

  1. Field names are converted to snake_case, and a few are renamed for clarity: Name becomes deployment_name, MatDescrip becomes primary_material, MatCat becomes material_category, and Tonnage becomes tons.

  2. DDate, an integer of the form yyyymmdd that uses 00 and 99 as sentinels for unknown parts, becomes deploy_date plus date_precision, deploy_year, deploy_month, and deploy_before.

  3. A recorded tonnage of 0 becomes NA, affecting 1,162 rows.

  4. LocAccuracy, coded 1 to 3, is spelled out as "Low", "Medium", and "High", matching FWC's own printed lists.

Rows are sorted by deploy_id. Nothing else is touched: primary_material and the degrees-and-minutes coordinate strings are left exactly as the service returns them.

Comparison with the published Excel list

FWC also distributes an Excel list of the same deployments. The two agree on every deployment, on all coordinates, and on tonnage, relief, depth, county, coast, jurisdiction, and accuracy. They differ in three small ways, all of which favour the service:

  • The service keeps inch marks that the spreadsheet drops, so a material reads Piling 3-6" X 12" X 12" rather than Piling 3-6' X 12 X 12. This affects 24 rows.

  • The service carries material_category, which the spreadsheet has no equivalent for.

  • The spreadsheet records 17 early deployments as Pre-1970, where the service gives no date at all. Those rows appear here with date_precision of "unknown". This is the one respect in which the spreadsheet holds more information.

Examples

str(reefs)
#> 'data.frame':	4548 obs. of  21 variables:
#>  $ deploy_id        : chr  "BA0001" "BA0002" "BA0003" "BA0004" ...
#>  $ county           : chr  "Bay" "Bay" "Bay" "Bay" ...
#>  $ deploy_date      : Date, format: NA NA ...
#>  $ date_precision   : Factor w/ 5 levels "day","month",..: 5 5 5 5 5 3 3 1 1 1 ...
#>  $ deploy_year      : int  NA NA NA NA NA 1970 1975 1977 1978 1978 ...
#>  $ deploy_month     : int  NA NA NA NA NA NA NA 9 7 7 ...
#>  $ deploy_before    : int  NA NA NA NA NA NA NA NA NA NA ...
#>  $ deployment_name  : chr  "Elvira" "Life Boats (Bay)" "Navy Barge" "Davis Barge" ...
#>  $ description      : chr  "The \"Elvira\", About 200 Feet West of The PCMI Barge" "7 Lifeboats, Tied Together" "Navy Barge" "Davis Barge" ...
#>  $ primary_material : chr  "Vessel 70'" "Lifeboats" "Barge" "Barge" ...
#>  $ material_category: chr  "Vessel" "Vessel" "Vessel" "Vessel" ...
#>  $ tons             : num  NA NA NA NA NA NA 355 NA NA NA ...
#>  $ relief           : num  0 0 0 0 0 6 30 20 25 8 ...
#>  $ depth            : num  70 25 42 55 20 70 190 72 65 74 ...
#>  $ jurisdiction     : chr  "State" "State" "State" "State" ...
#>  $ coast            : chr  "Gulf" "Gulf" "Gulf" "Gulf" ...
#>  $ lat_dm           : chr  "30° 06.694' N" "30° 06.948' N" "30° 04.455' N" "30° 00.454' N" ...
#>  $ long_dm          : chr  "85° 49.799' W" "85° 42.347' W" "85° 42.365' W" "85° 36.472' W" ...
#>  $ lat_dd           : num  30.1 30.1 30.1 30 30.1 ...
#>  $ long_dd          : num  -85.8 -85.7 -85.7 -85.6 -85.7 ...
#>  $ location_accuracy: chr  "Low" "Low" "High" "Low" ...
#>  - attr(*, "snapshot_date")= Date[1:1], format: "2026-05-13"

attr(reefs, "snapshot_date")
#> [1] "2026-05-13"

table(reefs$coast, reefs$jurisdiction)
#>           
#>            Federal State
#>   Atlantic     758   530
#>   Gulf        1213  2047

# What the reefs are made of
sort(table(reefs$material_category), decreasing = TRUE)
#> 
#>   Module Concrete   Vessel    Metal     Rock    Other 
#>     2006     1448      572      281      161       80 

# How much of the deployment date is known
table(reefs$date_precision)
#> 
#>     day   month    year  before unknown 
#>    4226      10     269      26      17 

# Deployments with a full date, most recent first
dated <- reefs[reefs$date_precision == "day", ]
head(dated[order(dated$deploy_date, decreasing = TRUE), c(
  "deploy_id", "deploy_date", "county", "material_category"
)])
#>      deploy_id deploy_date     county material_category
#> 1277    DA0278  2026-04-19 Miami-Dade            Module
#> 2284    LE0139  2026-04-06        Lee          Concrete
#> 4146    ST0260  2026-03-30   Sarasota            Module
#> 3113    OK0549  2026-03-23   Okaloosa            Vessel
#> 4145    ST0259  2026-03-23   Sarasota            Module
#> 4147    ST0261  2026-03-23   Sarasota            Module