ArcGIS REST API 如何从MapServer获取栅格图层:以澳洲5米DEM为例
核心原因
该MapServer的第3层为栅格数据集图层,不支持查询矢量图层所用的Query操作,也不支持arcpullr中仅适用于矢量要素的get_layer_by_poly函数。查看服务元数据可见,第3层的支持操作仅有Export Image、Identify等栅格专用操作,无Query选项,因此之前的调用无返回结果。
解决方法
方法1:直接调用exportImage接口获取栅格
你可以直接拼接栅格导出接口的参数获取DEM,示例请求模板如下,可根据需求调整参数:
https://services.ga.gov.au/site_9/rest/services/DEM_LiDAR_5m/MapServer/export?bbox=133.226100657682,-23.6165145646468,133.235899342318,-23.6074854353532&bboxSR=4283&size=196,196&imageSR=4283&format=tiff&pixelType=F32&f=image
参数说明:
bbox:研究区边界,和你之前查询用的参数一致bboxSR:边界的坐标系,这里对应GDA94(EPSG:4283)size:导出影像的宽高像素数,你提供的研究区宽高约为980米,5米分辨率下对应宽高为980/5=196像素format:导出格式,DEM数据建议选tiffpixelType:像素值类型,该DEM是浮点型高程,选F32即可f=image:直接返回影像文件,若需要先获取下载地址可改成f=json
方法2:用arcpullr包的栅格专用函数拉取
arcpullr提供了专门拉取栅格图层的get_raster_layer函数,把原来的矢量拉取代码替换成以下内容即可:
# 原有矢量拉取逻辑保持不变 library(arcpullr) library(sf) library(jsonlite) loc_lng <- 133.231 loc_lat <- -23.612 study_area <- 1000 bbox_area <- osmar::center_bbox(loc_lng, loc_lat, study_area, study_area) loc_bbox_pol <- tmaptools::bb_poly(bbox_area) loc_bbox_pol <- sf::st_as_sf(loc_bbox_pol) sf::st_crs(loc_bbox_pol) = 4326 loc_bbox_pol <- sf::st_transform(loc_bbox_pol, 4283) DEM_Boundary <- arcpullr::get_layer_by_poly("https://services.ga.gov.au/site_9/rest/services/DEM_LiDAR_5m/MapServer/1/", loc_bbox_pol, sp_rel = "esriSpatialRelIndexIntersects") DEM_Info <- arcpullr::get_layer_by_poly("https://services.ga.gov.au/site_9/rest/services/DEM_LiDAR_5m/MapServer/2/", loc_bbox_pol, sp_rel = "esriSpatialRelIndexIntersects") # 新增栅格拉取逻辑 dem_raster <- arcpullr::get_raster_layer( url = "https://services.ga.gov.au/site_9/rest/services/DEM_LiDAR_5m/MapServer/3", geometry = loc_bbox_pol, format = "tiff", pixel_type = "F32" )
拉取完成后dem_raster就是标准的Raster对象,可直接在R中进行后续分析、绘图。
内容的提问来源于stack exchange,提问作者jorge
相关产品推荐
相关产品推荐

