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”没有单元格值
那么,实际问题是:
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
是正确的选择,但显然我还是没有看到什么。