如何使用 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 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?