我想将数据作为SF对象从小叶 map 导入R中. map 是这个网站:https://erickgn.github.io/mapafc/我也有来自 map 的HTML,如下所示:https://raw.githubusercontent.com/erickgn/mapafc/main/index.html.

推荐答案

我还有来自 map 的HTML,如下所示:https://raw.githubusercontent.com/erickgn/mapafc/main/index.html.

那你就什么都有了.要么将页面保存在本地,要么使用xml2包将其废弃.如果您查看页面源代码,您可以找到类似以下内容:

geo_json_b75320e180b34bb88a8a9025dff8675e_add({"bbox": [-44.447264,
 -23.03329, -41.6957233, -22.2949485],[...]

似乎这就是您的特性,您可以使用SF::ST_READ或jsonlite包来阅读它.

第一个JSON的一个小示例:

library(rvest)
url <- "https://raw.githubusercontent.com/erickgn/mapafc/main/index.html"
text <- html_text(read_html(url))

现在我们必须定位json和json前后的两个字符串 在这两者之间扮演一个角色.请注意+1, -22--第一个是非常明显的,第二个是试图删除不必要的新行等等.

library(stringi)

st <- stri_locate_first_fixed(text, "geo_json_b75320e180b34bb88a8a9025dff8675e_add(")[2]+1
fi <- stri_locate_first_fixed(text, "geo_json_b75320e180b34bb88a8a9025dff8675e.bindTooltip(")[1]-22

json <- substring(text, st, fi)

最后,让我们将json转换为R对象:

jsonlite::fromJSON(json)
#> $bbox
#> [1] -44.44726 -23.03329 -41.69572 -22.29495
#> 
#> $features
#>                                           bbox
#> 1   -43.59792, -22.82906, -43.58869, -22.82160
#> 2   -43.38023, -22.96123, -43.37173, -22.95453
#> 3   -43.50182, -23.03329, -43.49279, -23.02227
#> 4   -43.29931, -22.99099, -43.29163, -22.98606
[...]

您可以对下一个json重复类似的步骤.

阅读sf个包裹:

library(sf)
a <- st_read(json)
#> Reading layer `OGRGeoJSON' from data source 
#> [...]
#>   using driver `GeoJSON'
#> Simple feature collection with 249 features and 16 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -44.44726 ymin: -23.03329 xmax: -41.69572 ymax: -22.29495
#> Geodetic CRS:  WGS 84
plot(a$geometry)

reprex package(v2.0.1)于2022年2月15日创建

向您致敬, 格泽戈尔茨

Html相关问答推荐

删除第一个列表项上的左边框

Tailwincss:自动设置网格高度

如何在Vim中删除Html标签?

如何在元素的三条边中间换行边框?

用于删除页面页眉上的超链接的CSS

嵌套表列高度不是100%高度的问题

如何使用HTML和css代码在vb.net上打印POS

Tailwind CSS:overflow-y Property Not Scrolling Unreliably to Bottom with top-[63px]

Flexbox在元素之间造成了太大的差距

为什么 Select 元素在带有数据绑定的Blazor上行为怪异?

可以';t使我的导航栏在HTML/CSS中正确对齐

布局更改时的转换

CSS:双面元素未正确显示边框

将三个div转换为显示flex

使用 TailwindCSS 将徽标放在左上角,将菜单放在右上角

网站页脚中的 Quarto 安装版本

HTML 没有在 Django 中正确呈现

将 div 项与 flexbox 对齐

从排列的 2 个网格到彼此下方的 2 个网格(响应性)

如果未提供目标地址且存在 innerText,则删除所有空锚标记