将传单地图中的数据作为 R 中的 sf 对象导入
Import data from a leaflet map as an sf object in R
我想将传单地图中的数据作为 R 中的 sf 对象导入。地图是这个站点:https://erickgn.github.io/mapafc/ I also have the HTML from the map as following:https://raw.githubusercontent.com/erickgn/mapafc/main/index.html.
I also have the HTML from the map as following: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(s) 重复类似的步骤。
并使用 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-02-15 创建
此致,
格热戈日
我想将传单地图中的数据作为 R 中的 sf 对象导入。地图是这个站点:https://erickgn.github.io/mapafc/ I also have the HTML from the map as following:https://raw.githubusercontent.com/erickgn/mapafc/main/index.html.
I also have the HTML from the map as following: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(s) 重复类似的步骤。
并使用 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-02-15 创建此致, 格热戈日