Skip to content

Instantly share code, notes, and snippets.

@JosiahParry
Created September 29, 2025 18:09
Show Gist options
  • Save JosiahParry/b8991af1c8f6cc23aa1346b7dc0558c4 to your computer and use it in GitHub Desktop.
Save JosiahParry/b8991af1c8f6cc23aa1346b7dc0558c4 to your computer and use it in GitHub Desktop.
preview portal feature services
# This should be in .Renviron
Sys.setenv("ARCGIS_HOST" = "your-portal-host")
Sys.setenv(
"ARCGIS_API_KEY" = "your-api-key"
)
library(arcgis)
set_arc_token(auth_key(key))
# get my content items from my portal
# my API key is scoped to have access to this
feature_services <- arc_user_content("jparry_geosaurus") |>
# filter to only Feature Services
subset(type == "Feature Service")
library(shiny)
library(bslib)
available_layers <- setNames(
feature_services$id,
feature_services$name
)
ui <- page_sidebar(
sidebar = sidebar(
selectInput(
"fserv_id",
"Select a layer to preview",
choices = available_layers
),
),
card(
card_header(textOutput("card_title")),
card_body(
tableOutput("fserv_preview")
)
)
)
server <- function(input, output) {
# Reactive expression to get the selected feature service data
selected_data <- reactive({
req(input$fserv_id)
tryCatch(
{
item <- arc_open(input$fserv_id)
layers <- get_all_layers(item)
if (length(layers) > 0) {
arc_select(layers$layers[[1]], n_max = 10)
} else {
data.frame(Message = "No layers found in this feature service")
}
},
error = function(e) {
data.frame(Error = paste("Failed to load data:", e$message))
}
)
})
# Set the card title to the selected layer name
output$card_title <- renderText({
req(input$fserv_id)
selected_name <- names(available_layers)[available_layers == input$fserv_id]
paste("Preview of:", selected_name)
})
# Create table preview output
output$fserv_preview <- renderTable({
selected_data()
})
}
shinyApp(ui = ui, server = server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment