【问题标题】:Need: clip/select/cut/subset (or just show) the values of a USA raster including the Contiguous US, Alaska and Hawaii需要:剪辑/选择/剪切/子集(或仅显示)美国栅格的值,包括美国本土、阿拉斯加和夏威夷
【发布时间】:2019-05-30 07:08:49
【问题描述】:

GIS 人员,我需要剪辑/选择/剪切/子集(或仅显示)包括大陆、阿拉斯加和夏威夷在内的美国栅格的值。看到包含一些非常远的岛屿或领土的大地图令人困惑。因此,我一直在尝试选择/剪切栅格以仅包括美国大陆、阿拉斯加和夏威夷,然后进行可视化。我开发的代码如下:

library(rgdal)
library(raster)

state <- getData("GADM", country="USA", level=1)
projection(state) <- CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")

nestates <- c("Alabama","Arizona", "Arkansas", "California", "Colorado",  # Contiguous/Continental United States
              "Connecticut", "Delaware", "Florida", "Georgia", "Idaho",
              "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", 
              "Louisiana", "Maine", "Maryland", "Massachusetts", 
              "Michigan", "Minnesota", "Mississippi", "Missouri", 
              "Montana", "Nebraska", "Nevada", "New Hampshire", "New 
               Jersey", "New Mexico", "New York", "North Carolina",
               "North Dakota", "Ohio", "Oklahoma", "Oregon", 
               "Pennsylvania", "Rhode Island","South Carolina", 
               "South Dakota", "Tennessee", "Texas", "Utah", "Vermont",
               "Virginia", "Washington", "West Virginia", "Wisconsin", 
               "Wyoming",
               "Alaska", "Hawaii") # I tried excluding Hawaii too

# I believe the issue is with insular territories 

state.sub <- state[as.character(state@data$STATE_NAME) %in% nestates, ]

elevation <- raster("USA_1.tif")

elevation.sub <- crop(elevation, extent(state.sub))

elevation.sub <- mask(elevation.sub, state.sub) # Error in x@polygons[[i]] : subscript out of bounds

plot(elevation.sub)
plot(state.sub, add = TRUE)

到目前为止的输出:

可复现的example

需要这样的东西:

我已经尝试过thisthisthis

非常感谢任何帮助。

【问题讨论】:

    标签: r raster r-raster sp rgdal


    【解决方案1】:

    我是这样解决的:

    us<-getData('GADM', country='USA', level=1)  #Get the County Shapefile for the US
    
    nestates <-         c("Alabama","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","District of Columbia",
              "Florida","Georgia","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland",          
              "Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire",       
              "New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania",    
              "Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington",        
              "West Virginia","Wisconsin","Wyoming")
    #"Alaska" polygons include the far away Islands   #"Hawaii"
    # I followed these tutorials/Q&A
    #http://data-analytics.net/wp-content/uploads/2014/09/geo2.html
    #https://gis.stackexchange.com/questions/61243/clipping-a-raster-in-r/61278
    
    ne = us[match(toupper(nestates),toupper(us$NAME_1)),]
    raster_c <- crop(raster_1, extent(ne))
    

    我知道了:

    希望对他人有所帮助

    【讨论】:

      【解决方案2】:

      作为替代方案,请考虑包 spData 为 美国已经分裂为毗邻的美国、阿拉斯加、夏威夷和其他岛屿 你可以直接使用。例如,使用下载的高程栅格 raster::getData:

      library(spData)
      library(sf)
      library(raster)
      
      elev   <- raster::getData("alt", country="USA", level=1) 
      #> returning a list of RasterLayer objects
      usa    <- spData::us_states %>% sf::st_transform(4326)
      hawaii <- spData::hawaii %>% sf::st_transform(4326)
      alaska <- spData::alaska %>% sf::st_transform(4326)
      
      # crop raster to area of interest and plot (Note that the data downloaded with `raster::getData`
      # is split in four subdatasets, so in this case you need to select the correct one.)
      usa_elev <- crop(elev[[1]], usa)
      plot(usa_elev)
      plot(sf::st_geometry(usa), add = TRUE)
      

      alaska_elev <- crop(elev[[2]], alaska)
      plot(alaska_elev)
      plot(st_geometry(alaska), add = TRUE)
      

      hawaii_elev <- crop(elev[[4]], hawaii)
      plot(hawaii_elev)
      plot(st_geometry(hawaii), add = TRUE)
      

      reprex package (v0.2.1) 于 2019-01-04 创建

      【讨论】:

      • 很好的解决方案!对不起,迟到的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多