如何使用 arcpullr::get_spatial_layer() 和 arcpullr::get_layer_by_poly()
Posted
技术标签:
【中文标题】如何使用 arcpullr::get_spatial_layer() 和 arcpullr::get_layer_by_poly()【英文标题】:How to use arcpullr::get_spatial_layer() and arcpullr::get_layer_by_poly() 【发布时间】:2021-06-29 20:44:07 【问题描述】:我无法通过软件包文档https://cran.r-project.org/web/packages/arcpullr/vignettes/intro_to_arcpullr.html 弄清楚这一点。
我的代码返回如下所述的错误。
library(arcpullr)
url <- "https://arcgis.deq.state.or.us/arcgis/rest/services/WQ/WBD/MapServer/1"
huc8_1 <- get_spatial_layer(url)
huc8_2 <- get_layer_by_poly(url,geometry = "esriGeometryPolygon")
huc8_1:
if (layer_info$type == "Group Layer") 中的错误: 参数长度为零
huc8_2:
get_sf_crs(geometry) 中的错误:“sf”%in% class(sf_obj) 不正确
如果您能提供任何帮助来解释错误并提出任何解决方案,我们将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:我没有使用arcpullr
包。使用带有where
子句的leaflet.esri::addEsriFeatureLayer
有效。
以下面的相关代码为例:
leaflet.esri::addEsriFeatureLayer(
url="https://arcgis.deq.state.or.us/arcgis/rest/services/WQ/IR_201820_byParameter/MapServer/2",
options = leaflet.esri::featureLayerOptions(where = IR_where_huc12)
)
【讨论】:
【参考方案2】:您必须将 sf 对象作为第二个参数传递给任何 get_layer_by_*
函数。我使用点而不是多边形进行空间查询(因为它更容易创建)对您的示例进行了一些更改,但是get_layer_by_poly
将使用 sf 多边形而不是点以相同的方式工作。此外,您使用的服务需要令牌。我将网址改为USGS HU 6-digit basins
library(arcpullr)
url <- "https://hydro.nationalmap.gov/arcgis/rest/services/wbd/MapServer/3"
query_pt <- sf_point(c(-90, 45))
# this would query everything in the feature layer, which may or may not be huge
# huc8_1 <- get_spatial_layer(url)
huc8_2 <- get_layer_by_point(url, query_pt)
huc_map <- plot_layer(huc8_2)
huc_map
huc_map + ggplot2::geom_sf(data = query_pt)
【讨论】:
以上是关于如何使用 arcpullr::get_spatial_layer() 和 arcpullr::get_layer_by_poly()的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?