html 从单张Map导入数据作为R中的sf对象

6uxekuva  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(115)

我想从传单Map导入数据作为R中的sf对象。Map是这个站点:https://erickgn.github.io/mapafc/我还从Map的HTML如下:是的。

w6mmgewl

w6mmgewl1#

我还从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前后的两个字符串,并取中间的部分。请注意+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)

此致,格热戈兹

相关问题