source("utils.R") source("inat-ranges.R") url <- "https://s3-west.nrp-nautilus.io/public-data/cache/inat/f0108ef86feababffeab3d2be6f09373.h3j" #url <- "https://minio.carlboettiger.info/public-data/cache/inat/4fd3323845ee860b39609783566b2212.h3j" url <- "https://minio.carlboettiger.info/public-data/cache/inat/f0108ef86feababffeab3d2be6f09373.h3j" #x <- jsonlite::read_json(url) m = maplibre(center = c(-110,37), zoom=3) |> add_draw_control() |> add_h3j_source("h3j_source", url = url ) |> add_fill_extrusion_layer( id = "h3j_layer", source = "h3j_source", tooltip = "n", fill_extrusion_color = viridis_pal("height"), fill_extrusion_height = list( "interpolate", list("linear"), list("zoom"), 0, 0, 1, list("*", 100000, list("get", "height")) ), fill_extrusion_opacity = 0.7 ) htmlwidgets::saveWidget(m, "test2.html") ## Illustrate/test core app functionality without shiny library(dplyr) library(duckdbfs) library(ggplot2) library(mapgl) library(glue) library(jsonlite) load_h3() load_spatial() source("utils.R") source("inat-ranges.R") duckdbfs::duckdb_secrets() inat <- open_dataset("s3://public-inat/hex") aoi <- spData::us_states aoi <- spData::world # publish richness at the aoi (bbox or poly) meta <- richness(inat, aoi) m <- richness_map(meta) m library(htmlwidgets) htmlwidgets::saveWidget(m, "total-richness.html") # publish richness at the aoi (bbox or poly) meta <- richness(inat, aoi, rank = "class", taxon = "Aves") m <- richness_map(meta) htmlwidgets::saveWidget(m, "aves-richness.html") # publish richness at the aoi (bbox or poly) meta <- richness(inat, aoi, rank = "class", taxon = "Mammalia") m <- richness_map(meta) htmlwidgets::saveWidget(m, "mammals-richness.html") ## UGH can't deal with antimeridian # dropme <- antimeridian_hexes(3) # dropme <- antimeridian_hexes(4) |> rename(h4 = h3id) # inat |> anti_join(dropme) |> write_dataset("s3://public-inat/ranges.parquet") # inat <- open_dataset("s3://public-inat/ranges.parquet", recursive = FALSE) # mutate(h3 = h3_cell_to_parent(h4, 3L)) m <- maplibre(center = c(-110.5, 34.8), zoom = 4) |> add_draw_control() richness_map(m, "https://minio.carlboettiger.info/public-data/inat-tmp-ranges.h3j") library(htmlwidgets) htmlwidgets::saveWidget(m, "example.html") amphib = open_dataset("s3://public-inat/polygon/Amphibia.parquet", recursive = FALSE) gdf <- amphib |> filter(name == "Ambystoma californiense") |> to_sf(crs=4326) maplibre(center = c(-122.5, 37.8), zoom = 4) |> add_source(id = "gdf", gdf) |> add_layer("gdf-layer", type = "fill", source = "gdf", paint = list( "fill-color" = "darkgreen", "fill-opacity" = .9 ) ) # Access SVI #svi = open_dataset("https://minio.carlboettiger.info/public-social-vulnerability/2022/SVI2022_US_tract.parquet") #tracts = open_dataset("https://minio.carlboettiger.info/public-social-vulnerability/2022-tracts-h3-z5.parquet") # Access CalEnviroScreen # ces = open_dataset("https://minio.carlboettiger.info/public-calenviroscreen/ces_2021.parquet", format="parquet") # Filter GBIF to our area-of-interest (h-index) and species of interest ca <- tracts |> filter(STATE == "California") |> mutate(h4 = h3_cell_to_parent(h5, 4L)) |> mutate(h4 = tolower(as.character(h4))) out <- ca |> inner_join(inat, by = "h4") |> count(STATE, COUNTY, FIPS, h5) # mutate(height = n / max(n)) |> url = "https://minio.carlboettiger.info/public-data/cache/inat/cec4b3087f0b6c41ecc384da2521f97c.h3j" maplibre() |> add_draw_control() |> add_h3j_source("h3j_source", url = url ) |> add_fill_extrusion_layer( id = "h3j_layer", source = "h3j_source", tooltip = "n", fill_extrusion_color = viridis_pal("height"), fill_extrusion_height = list( "interpolate", list("linear"), list("zoom"), 0, 0, 1, list("*", 100000, list("get", "height")) ), fill_extrusion_opacity = 0.7 )