自更新以来,多边形未在小叶r图中绘制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自更新以来,多边形未在小叶r图中绘制相关的知识,希望对你有一定的参考价值。

我有一个闪亮的应用程序,其中有一个带有两个不同多边形的传单地图。传单地图工作得很好,直到我将传单包更新到2.0.1。现在,当我运行应用程序时...多边形没有被绘制,并且没有错误被抛向我。我环顾四周,没有发现任何可以解决问题的方法。如果有人能给我一些指导或指出我正确的方向,我将不胜感激!

链接访问shapefile:https://drive.google.com/drive/folders/1bPHrAu6Wae1y5uiZCsSMtSi6Rja157bj?usp=sharing

码:

library(shiny)
library(shinydashboard)
library(leaflet)
library(sf)
library(rmapshaper)
### Read in shapefiles  ###
NJ_Map_Road<-st_read(getwd(),layer="2014_NJ_Integrated_Report_AU")
Impaired_HUCS<-st_read(getwd(),layer = "Impaired_HUCS_Shapefile")
### Change projection to work with leaflet ###
map_df <- st_transform(NJ_Map_Road, crs="+init=epsg:4326")
map_impaired_df<-st_transform(Impaired_HUCS,crs="+init=epsg:4326")
###########################################################################################
### simplify shapefiles ###
map_df<-ms_simplify(map_df)
map_impaired_df<-ms_simplify(map_impaired_df)
###########################################################################################
### This drop Z and M dimensions
good_map_df<- st_zm(map_df, drop = T, what = "ZM")
good_imp_map_df<- st_zm(map_impaired_df, drop = T, what = "ZM")
#################################################################

ui<- dashboardPage(
  header = dashboardHeader(),
  sidebar = dashboardSidebar(),
  body = dashboardBody(
    box(width=12,leafletOutput("leaf"))))
### Server ###
server<- function(input,output,session){
  ### This creates interactive map ###
  output$leaf<- renderLeaflet({
    leaflet(options = leafletOptions(minZoom = 7))%>%
      addTiles()%>%
      addTiles(group = "OSM (default)") %>%
      addProviderTiles(providers$OpenStreetMap.BlackAndWhite, group = "Grey") %>%
      addProviderTiles(providers$Esri.WorldImagery, group = "Satellite") %>%
      setView(lng = -74.4 ,lat =40, zoom = 7)%>%
      addPolygons(data= good_map_df,color = "#636060",weight = 1,smoothFactor = 1,
                  opacity = 0.5, fillOpacity = 0.1,group = "HUCs",fillColor = "white",
                  highlightOptions = highlightOptions(color = "blue",
                                                      weight = 2,bringToFront = TRUE))%>%

      addPolygons(data = good_imp_map_df,color = "#F3161B",weight = 1,smoothFactor = 1,
                  opacity = 0.5, fillOpacity = 2,
                  group = "Impaired HUCs",
                  highlightOptions = highlightOptions(color = "blue",
                                                      weight = 2,bringToFront = TRUE),
                  label = ~ paste(HUC14TXT,AU_name),
                  layerId = ~ good_imp_map_df$AU_name)%>%
      addLayersControl(
        baseGroups = c("OSM (default)", "Grey", "Satellite"),
        overlayGroups = c("HUCs","Impaired HUCs"),
        options = layersControlOptions(collapsed = FALSE))%>%
      addLegend("bottomright",colors = c("#636060","#F3161B"),opacity = 2,
                labels = c("HUC14s","Impaired HUCs"))
  })
  ###########################################################################################  
  ### Allows user to have map zoomed in when impaired HUC is clicked ###
  observe({
    click <- input$leaf_shape_click
    if(is.null(click))
      return()
    else
      leafletProxy("leaf")%>%
      setView(lng = click$lng , lat = click$lat, zoom=10)
  })

}

shinyApp(ui,server)
答案

进一步挖掘,问题似乎与ms_simplify()为几何列添加名称的事实有关:

polys_sf<-st_read(system.file("shape/nc.shp", package="sf") ) %>% 
  st_transform(crs="+init=epsg:4326") %>% 
  ms_simplify(.)

names(st_geometry(polys_sf))

  [1] "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25"
 [27] "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" "51"
 [53] "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70" "71" "72" "73" "74" "75" "76" "77"
 [79] "78" "79" "80" "81" "82" "83" "84" "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95" "96" "97" "98" "99"

正如https://github.com/r-spatial/sf/issues/880#issuecomment-435304536所建议的,删除名称将解决问题。因此,这有效:

library(shiny)
library(shinydashboard)
library(leaflet)
library(sf)
library(rmapshaper)
### Read in shapefiles  ###
polys_sf<-st_read(system.file("shape/nc.shp", package="sf") ) %>% 
  st_transform(crs="+init=epsg:4326") %>% 
  ms_simplify(.)

names(st_geometry(polys_sf)) = NULL

ui<- dashboardPage(
  header = dashboardHeader(),
  sidebar = dashboardSidebar(),
  body = dashboardBody(
    box(width=12,leafletOutput("leaf"))))
### Server ###
server<- function(input,output,session){
  ### This creates interactive map ###
  output$leaf<- renderLeaflet({
    leaflet(options = leafletOptions(minZoom = 7))%>%
      addPolygons(data= polys_sf)
  })
}

shinyApp(ui,server)

,如果您注释掉names(st_geometry(polys_sf)) = NULL线,则不会显示多边形。

HTH!

(顺便说一句,作为旁注/建议:基于“R”包中可用的“测试”数据集构建一个可重复的最小示例,可以帮助确定问题并允许其他人轻松复制/理解它。

以上是关于自更新以来,多边形未在小叶r图中绘制的主要内容,如果未能解决你的问题,请参考以下文章

从坐标图中绘制多边形画布

动态 TextView 未在片段中更新

R语言ggplot2可视化可视化聚类图使用geom_encircle函数绘制多边形标定属于同一聚类簇的数据点并自定义每个聚类簇数据点的颜色多边形框的颜色(Cluster Plot)主副标题题注

Android自定义控件 芝麻信用分雷达图

R语言ggplot2可视化绘制散点图(scatter plot)使用gghighlight包突出高亮散点图中的特定数据点并自定义添加彩色文本标签(color text annotation)

R语言polygon函数绘制多边形实战