Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 删除水体上光栅图像的一部分_R_Leaflet_Gis_Raster - Fatal编程技术网

R 删除水体上光栅图像的一部分

R 删除水体上光栅图像的一部分,r,leaflet,gis,raster,R,Leaflet,Gis,Raster,我试图用单张制作一张地图,最终将用于显示一个地理区域内的各种估算值 很抱歉链接到数据。我不够聪明,不知道如何从谷歌文档导入.RData文件。我正在使用的光栅形状可以从 (这是与下面使用的Coord、rnew和cleveland对象的更新链接) 我可以通过以下方式获得我想要的地图: library(tigris) library(leaflet) library(raster) library(magrittr) library(dplyr) load("Coord.Rdata") rnew

我试图用
单张
制作一张地图,最终将用于显示一个地理区域内的各种估算值

很抱歉链接到数据。我不够聪明,不知道如何从谷歌文档导入
.RData
文件。我正在使用的光栅形状可以从 (这是与下面使用的
Coord
rnew
cleveland
对象的更新链接)

我可以通过以下方式获得我想要的地图:

library(tigris) 
library(leaflet)
library(raster)
library(magrittr)
library(dplyr)

load("Coord.Rdata")

rnew <- 
  rasterFromXYZ(
    Coord,
    crs = "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
  )

pal <- colorNumeric(c("#0C2C84", "#41B6C4", "#FFFFCC"), values(rnew),
                    na.color = "transparent")

leaflet() %>% addTiles() %>%
  addRasterImage(rnew, colors = pal, opacity = 0.4)
库(底格里斯)
图书馆(单张)
图书馆(光栅)
图书馆(magrittr)
图书馆(dplyr)
加载(“坐标数据”)
rnew%
addRasterImage(rnew,颜色=pal,不透明度=0.4)
产生

现在,尽管如此美丽,但在伊利湖上空展示估计值对我来说没有多大意义。我想删除湖面上的部分光栅图像,或者将其设置为透明…这不会给人留下我正在计算海洋野生动物风险的印象

我想如果我能找到俄亥俄州的纬度和经度,我可能就可以使用交叉点,从而消除湖上的点。我试着用

ohio <- tracts(state = "39")

ohio_raster <- 
  attributes(ohio)$data[, c("INTPTLON", "INTPTLAT")] %>%
  setNames(c("x", "y")) %>%
  mutate(x = sub("^[-]", "", x) %>%
           as.numeric(),
         y = sub("^[+]", "", x) %>%
           as.numeric(),
         layer = 1) %>%
  as.matrix() %>%
  rasterFromXYZ(crs = "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
ohio%
突变(x=sub(“^[-]”,“”,x)%>%
as.numeric(),
y=sub(“^[+]”,“”,x)%>%
as.numeric(),
层=1)%>%
as.matrix()%>%
rasterFromXYZ(crs=“+init=epsg:4326+proj=longlat+datum=WGS84+no_defs+ellps=WGS84+towgs84=0,0,0”)
但是我犯了错误

rasterFromXYZ(,crs=“+init=epsg:4326+proj=longlat”中存在错误 +基准面=WGS84+no_defs+ellps=WGS84+towgs84=0,0,0”):x单元格大小不规则

这种方法很有效,但是没有颜色,所以我看不到交叉点

ohio_raster <- 
  raster(ohio, crs = "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")

leaflet() %>% addTiles() %>%
  addRasterImage(rnew, colors = pal, opacity = 0.4) %>%
  addRasterImage(ohio_raster, colors = "red", opacity = .4)
俄亥俄州光栅%addTiles()%%>% addRasterImage(rnew,颜色=pal,不透明度=0.4)%>% addRasterImage(俄亥俄州光栅,颜色=“红色”,不透明度=.4) 警告信息: 在光栅::项目光栅(x,光栅::项目范围(x,crs=sp::crs(epsg3857))):
“from”没有单元格值

(注意:地图缩小到包括俄亥俄州的所有地区)

我还认为,如果我使用spatial软件包,可能会计算出交叉点:

spdf <- 
  SpatialPointsDataFrame(Coord[, 1:2], 
                         Coord,
                         proj = CRS("+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))

ohio_coord <- attributes(ohio)$data[, c("INTPTLON", "INTPTLAT")] %>%
  setNames(c("x", "y")) %>%
  mutate(x = sub("^[-]", "", x) %>%
           as.numeric(),
         y = sub("^[+]", "", x) %>%
           as.numeric(),
         layer = 1) %>%
  as.matrix() %>%
  as.data.frame()

spdf_ohio <- 
  SpatialPointsDataFrame(ohio_coord[, 1:2], 
                         ohio_coord,
                         proj = CRS("+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))

spdf_merge <- merge(spdf, spdf_ohio)

leaflet() %>% addTiles() %>%
  addRasterImage(raster(spdf_merge), colors = pal, opacity = 0.4) 
spdf%
突变(x=sub(“^[-]”,“”,x)%>%
as.numeric(),
y=sub(“^[+]”,“”,x)%>%
as.numeric(),
层=1)%>%
as.matrix()%>%
as.data.frame()
俄亥俄州spdf_%
addRasterImage(光栅(spdf_合并),颜色=pal,不透明度=0.4)
但我明白了

警告消息:在raster::projectRaster(x,raster::projectExtent(x, crs=sp::crs(epsg3857)):“from”没有单元格值

那么,实际问题是:

  • 这是解决这个问题的合理方法吗?有没有我错过的更好的方法
  • 如何从纬度和经度转换为光栅图像,并使用一个值进行着色,以便查看正在使用的内容
  • 即使我手头上的问题没有直接的答案,我也会欣喜若狂地得到一些指导,告诉我在哪里可以找到类似问题的例子。我还没有发现任何类似的东西,这可能是不知道正确的搜索词的迹象

    编辑: 我觉得我可能离目标更近了一步,但仍然没有达到目标

    我根据@IvanSanchez的推荐下载了《克利夫兰地理》。只需绘制多边形即可提供

    看起来像是我想要保留的土地空间。这是一个好的步骤

    现在我试着将它与我当前的光栅相交叉

    cleveland <- 
      readOGR(dsn = "cleveland_ohio.osm2pgsql-shapefiles",
              layer = "cleveland_ohio_osm_polygon",
              p4s = "+init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")
    
    leaflet() %>% addTiles() %>%
      addRasterImage(raster::intersect(rnew, cleveland), 
                     colors = pal, 
                     opacity = 0.4)
    
    cleveland%addTiles()%%>%
    addRasterImage(光栅::intersect(克里夫兰西北部),
    颜色=朋友,
    不透明度=0.4)
    
    但我似乎拥有的不是这些领域的交叉点,而是工会。或者别的什么


    我已将上面的链接更新为一个文件,其中包括
    Coord
    rnew
    cleveland
    对象。

    我建议您从下载该地区的地理数据。这将为陆地区域和水域提供一些漂亮的多边形-然后您可以将图形与陆地多边形相交(或从图形中减去水多边形)。

    您可以使用表示陆地区域的形状文件遮罩光栅。你可以使用你的俄亥俄州地形文件,但自然地球的可能会简化事情。例如:

    library(leaflet)
    library(raster)
    library(magrittr)
    library(rgdal)
    library(rgeos)
    
    load('Coord.Rdata')  
    rnew <- rasterFromXYZ(Coord, crs='+init=epsg:4326')
    pal <- colorNumeric(c('#0C2C84', '#41B6C4', '#FFFFCC'), values(rnew),
                        na.color = 'transparent')
    
    # Download and extract the Natural Earth data
    download.file(
      file.path('http://www.naturalearthdata.com/http/',
                'www.naturalearthdata.com/download/10m/physical/ne_10m_lakes.zip',
                f <- tempfile())
    unzip(f, exdir=tempdir())
    
    # Read in the lakes shapefile    
    lakes <- readOGR(tempdir(), 'ne_10m_lakes')
    
    # Create a "land" shapefile by taking the difference between the 
    # raster's extent and the lakes polys
    land <- gDifference(as(extent(rnew), 'SpatialPolygons'), lakes)
    
    # Mask rnew
    rnew2 <- mask(rnew, land)
    
    leaflet() %>% addTiles() %>%
      addRasterImage(rnew2, colors = pal, opacity = 0.4)
    
    图书馆(传单)
    图书馆(光栅)
    图书馆(magrittr)
    图书馆(rgdal)
    图书馆(rgeos)
    加载('Coord.Rdata')
    
    在尝试了你的建议之后,我做了一些修改。我得到了克利夫兰的状态,但仍然不能仅仅在十字路口停下来。看起来,
    graster::intersection
    是正确的选择,但显然我还是没有看到什么。