为什么 arcpullr 从 ArcGIS REST API 拉出一个空的 RasterBrick?
Why is arcpullr pulling an empty RasterBrick from ArcGIS REST API?
我无法从 ArcGIS REST API 获取 R 中的栅格数据。它位于端点 https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_service/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer,我只想获取我感兴趣的区域的数据。我可以使用 url“https://maps.vcgi.vermont.gov/arcgis/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/WCSServer”成功地将数据作为网络覆盖服务加载到 QGIS 中,但我想要一些可以变成栅格图层或栅格的东西R 中的砖
我更喜欢高级方法并尝试了 arcpullr
包,使用我感兴趣区域的 sf
多边形对象来定义边界框(aoi
下面的代码,这是一个简单的特征集合,包含 1 个特征和 1 个字段;
边界框:xmin:499682.2 ymin:208467.7 xmax:503271.3 ymax:212056.7;
预计 CRS:NAD83/佛蒙特州,32145)。这个 returns 一个空的光栅砖(所有值都是 NA)在正确的位置:
endpoint <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/"
ndsm <- get_image_layer(url = endpoint, sf_object = aoi)
我也尝试根据 API reference 自己构建请求,使用各种查询,并且只能写入空图像文件(虽然服务器 returns 状态代码为 ' 200')。这是一个例子:
url <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/exportImage?f=html&bbox=499682.2,208467.7,503271.3,212056.7&imageSR=32145&bboxSR=32145&format=png"
file = tempfile(fileext = ".png")
httr::GET(url = url, httr::write_disk(file))
对于让 arcpullr
工作的任何想法、对其他相对简单方法的建议,或(作为最后的手段)学习更多关于 APIs 的资源,我将不胜感激。
您遇到的问题是您没有使用正确的 crs
。您只需要将 aoi
从 EPSG: 32145
转换为 EPSG: 3857
(空间投影信息在 Service webpage 上提供)。
所以,请在下面找到一个小表达式。
Reprex
- 代码
library(arcpullr)
# Creating the aoi in `EPSG: 32145` and converting it into the right crs (i.e. `EPSG: 3857`)
aoi <- st_sf(st_as_sfc(st_bbox(c(xmin = 499682.2, xmax = 503271.3, ymin = 208467.7, ymax = 212056.7), crs = st_crs(32145)))) %>%
st_transform(., st_crs(3857))
# Extracting the raster corresponding to the `aoi`
endpoint <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/"
ndsm <- get_image_layer(url = endpoint, sf_object = aoi)
- 输出(rasterbrick 包含像素值)
ndsm
#> class : RasterBrick
#> dimensions : 400, 400, 160000, 3 (nrow, ncol, ncell, nlayers)
#> resolution : 12.58247, 12.58247 (x, y)
#> extent : -8071116, -8066083, 5523882, 5528915 (xmin, xmax, ymin, ymax)
#> crs : +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
#> source : memory
#> names : X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.1, X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.2, X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.3
#> min values : 1, 49, 0
#> max values : 254, 254, 149
- 可视化
raster::plotRGB(ndsm)
由 reprex package (v2.0.1)
创建于 2022-02-21
我无法从 ArcGIS REST API 获取 R 中的栅格数据。它位于端点 https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_service/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer,我只想获取我感兴趣的区域的数据。我可以使用 url“https://maps.vcgi.vermont.gov/arcgis/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/WCSServer”成功地将数据作为网络覆盖服务加载到 QGIS 中,但我想要一些可以变成栅格图层或栅格的东西R 中的砖
我更喜欢高级方法并尝试了 arcpullr
包,使用我感兴趣区域的 sf
多边形对象来定义边界框(aoi
下面的代码,这是一个简单的特征集合,包含 1 个特征和 1 个字段;
边界框:xmin:499682.2 ymin:208467.7 xmax:503271.3 ymax:212056.7;
预计 CRS:NAD83/佛蒙特州,32145)。这个 returns 一个空的光栅砖(所有值都是 NA)在正确的位置:
endpoint <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/"
ndsm <- get_image_layer(url = endpoint, sf_object = aoi)
我也尝试根据 API reference 自己构建请求,使用各种查询,并且只能写入空图像文件(虽然服务器 returns 状态代码为 ' 200')。这是一个例子:
url <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/exportImage?f=html&bbox=499682.2,208467.7,503271.3,212056.7&imageSR=32145&bboxSR=32145&format=png"
file = tempfile(fileext = ".png")
httr::GET(url = url, httr::write_disk(file))
对于让 arcpullr
工作的任何想法、对其他相对简单方法的建议,或(作为最后的手段)学习更多关于 APIs 的资源,我将不胜感激。
您遇到的问题是您没有使用正确的 crs
。您只需要将 aoi
从 EPSG: 32145
转换为 EPSG: 3857
(空间投影信息在 Service webpage 上提供)。
所以,请在下面找到一个小表达式。
Reprex
- 代码
library(arcpullr)
# Creating the aoi in `EPSG: 32145` and converting it into the right crs (i.e. `EPSG: 3857`)
aoi <- st_sf(st_as_sfc(st_bbox(c(xmin = 499682.2, xmax = 503271.3, ymin = 208467.7, ymax = 212056.7), crs = st_crs(32145)))) %>%
st_transform(., st_crs(3857))
# Extracting the raster corresponding to the `aoi`
endpoint <- "https://maps.vcgi.vermont.gov/arcgis/rest/services/EGC_services/IMG_VCGI_LIDARNDSM_WM_CACHE_v1/ImageServer/"
ndsm <- get_image_layer(url = endpoint, sf_object = aoi)
- 输出(rasterbrick 包含像素值)
ndsm
#> class : RasterBrick
#> dimensions : 400, 400, 160000, 3 (nrow, ncol, ncell, nlayers)
#> resolution : 12.58247, 12.58247 (x, y)
#> extent : -8071116, -8066083, 5523882, 5528915 (xmin, xmax, ymin, ymax)
#> crs : +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs
#> source : memory
#> names : X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.1, X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.2, X_ags_6919e084_8cf5_46f6_b95c_1090872a66d0.3
#> min values : 1, 49, 0
#> max values : 254, 254, 149
- 可视化
raster::plotRGB(ndsm)
由 reprex package (v2.0.1)
创建于 2022-02-21