在R中转换空间数据时出现问题 - shapefile

3
我正在尝试获取北极冰的存在情况图。我正在使用从https://nsidc.org/data/masie/获取的shapefile文件。
library(maptools)
library(rgeos)
library(ggplot2)
library(rgdal)
library(plyr)
library(ggmap)
library(dismo)
library(raster)
library(plyr)  

ICE <- readOGR(".", "masie_ice_r00_v01_2018094_4km")
plot(ICE)

enter image description here

ICE_WGS84 <- spTransform(ICE, CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
plot(ICE_WGS84, axes=T)

enter image description here

你可以看到,多边形似乎被分割了,我想解决这个问题。有什么建议吗? 我想在Google地图上显示冰的存在。

mapImage <- get_map(location = c(lon = -160, lat = 66),
                    color = "color",
                    source = "google",
                    zoom = 4)

ggmap(mapImage) +
  geom_polygon(aes(x = long,
                   y = lat,
                   group = group),
               data = ICE_WGS84,
               fill="white") +
  labs(x = "Longitude",
       y = "Latitude")

预先感谢您!

我想要获得类似于这个的东西(没有多边形问题...) 在此输入图像描述


我仍然不确定您需要的输出是什么;是地图的 .png 还是该特定冰区域的 .shp? - SymbolixAU
如果我能在(谷歌)地图上标出带有冰存在的数据点,我将把它们全部保存为PNG格式。 - H_Frouin
1个回答

3
你看到的可能是由于多边形包围北极,图表混淆了内部和外部的多边形。幸运的是,由于你想使用Google地图,他们的绘图库非常聪明,可以解决这个问题。而且更加幸运的是,我的googleway包可以让你绘制谷歌地图。

注:

  1. 在此示例中,我使用library(sf)来读取和操作空间数据(它是R中“最新”的空间库)。

  2. 要使用Google Maps,您需要一个API密钥


library(sf)
library(googleway)

sf <- sf::st_read("~/Downloads/maise_ice_r00_4km/masie_ice_r00_v01_2018094_4km.shp")
sf <- sf::st_transform(sf, crs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")


set_key("your_map_api_key")

google_map() %>%
    add_polygons(data = sf, fill_colour = "#FFFFFF", fill_opacity = 0.6)

enter image description here


你可以向地图添加其他数据,例如标记,并使用 htmlwidgets :: saveWidget webshot :: webshot 保存地图的静态图像。
df_other_data <- data.frame(
    lon = c(-42, -60, 42.2), 
    lat = c(70, 70.1, 70.2)
    )

## assigning the map to an object `g` , and specifying the zoom & view options
g <- google_map(zoom = 6) %>%
    add_polygons(data = sf, fill_colour = "#FFFFFF", fill_opacity = 0.6, update_map_view = F) %>%
    add_markers(df_other_data)


setwd("~/Desktop/")

htmlwidgets::saveWidget(g, file = "ArcticMap.html")
webshot::webshot(url = "file:///Users/.../Desktop/ArcticMap.html",
                                 file = "ArcticMap.jpg")
## replace the '...' with your saved .html file path

enter image description here


什么都没有发生 - 查看器选项卡(在R Studio中)是空白的 - 为了确保,我需要为我的API密钥添加引号,对吗? - H_Frouin
@H_Frouin - 是的,它将会像这样 google_map(key = "AIzaSyxxxxx")。你使用的是哪个版本的RStudio?如果你按下“在新窗口中显示”按钮,它应该会在浏览器中打开;这个功能是否正常工作? - SymbolixAU
版本 1.1.383。哦,我明白了,它以Google地图的形式打开 - 问题在于我需要使用Google地图作为图层,因为我想在上面添加一些点(数据)并将地图保存为PNG格式。使用Googleway是否可以设置一些边界并保存为shapefile呢? - H_Frouin
如果您更新了RStudio,您应该直接在查看器窗口中看到地图。 - SymbolixAU
你是在保存一个形状文件(.shp)还是一个.png文件? - SymbolixAU
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接