从 R 中的 geojson 末尾删除方括号 []
Removing brackets [] from ends of geojson in R
我正在尝试从 USGS 网络服务 (streamstats) 将 geojson 作为空间对象(即 sp)导入 R,但无法将其转换为 R 的正确格式。
library(jsonlite)
mydata <- fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true")
这个 returns geojson 中的功能加上一堆我不需要的其他东西。我可以 select 只需要我需要的数据框,然后用:
写出来
tmp <- mydata$featurecollection[2,2]
write_json(tmp, 'test.json')
[{"type": "FeatureCollection", ...一堆其他东西}]
如果我手动删除 json 文件两端的方括号“[]”,然后我可以将其作为空间对象导入:
library(geojsonio)
test <- geojson_read('test.json', method='local', what='sp')
否则我会得到这个错误:
Error in rgdal::ogrListLayers(input) : Cannot open data source
有没有办法去掉两端的括号?也许还有一个更简单的解决方案,我从 select 出所需的数据框的地方遗漏了。
这个答案假设保存文件是一个必要的步骤(例如,用另一个 Rscript 读取它)。这样,你只进行一次缓慢的外部调用,然后你可以只请求你的本地文件来测试,这样就快多了。此外,外部请求可能并不总是可用。
作为解决方法,您可以删除 write_json 命令行并添加此命令行:
stringJson <- toJSON(tmp)
write(substr(stringJson, 2, nchar(stringJson) - 1), file = 'test.json')
另一种方法是使用 rjson 库来编写 json(但要小心,因为两个库都有同名的函数):
library(jsonlite)
library(rjson)
mydata <- jsonlite::fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true")
tmp <- mydata$featurecollection[2,2]
write(rjson::toJSON(tmp), file = 'test.json')
希望对您有所帮助:)
geojsonio
维护者 ...
因此 rgdal::readOGR
发生了变化,任何比有效文件路径长的 geojson 字符串都会被截断,因此不会被读取。参见 https://github.com/ropensci/geojsonio/issues/130
所以我们为 geojsonio::geojson_sp
做了一个解决方法,但没有为 geojsonio::geojson_read
虽然 jqr
可以解决这个问题
library(jqr)
library(geojsonio)
library(sf)
myurl <- "https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true"
jq(url(myurl), ".featurecollection[1]") %>% st_read(quiet = TRUE, stringsAsFactors = FALSE)
其中 jq
让我们无需先写入磁盘即可进入 JSON
这里还有一位 geojsonio
作者...
我认为 libraries/packages(geojsonio
、rgdal
等)中的任何一个都没有问题,但方括号使它不合适geojson 符合规范的对象(方括号表示数组)。
那个 url returns 一个 json 对象,它包含一个数组(容易混淆地称为 featurecollection
),然后包含两个对象,每个对象包含一个 name
和一个特征,每个特征都是一个合适的geojson
FeatureCollection
。那些 FeatureCollections
是我们想要提取的 - 一个 Point
(可能是分水岭的质心?),一个 Polygon
定义分水岭边界。
library(jsonlite)
library(geojsonio)
library(sp)
# Don't simplify the results so that it's easier to pull out the full geojson objects
mydata <- fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true",
simplifyVector = FALSE, simplifyDataFrame = FALSE)
# Extract each geojson object and 'auto_unbox' to remove square brackets from
# arrays of length 1:
point_geojsonsting <- toJSON(mydata$featurecollection[[1]]$feature,
auto_unbox = TRUE)
poly_geojsonsting <- toJSON(mydata$featurecollection[[2]]$feature,
auto_unbox = TRUE)
# Read directly to sp without writing to disk first:
point_sp <- geojson_sp(point_geojsonsting)
poly_sp <- geojson_sp(poly_geojsonsting)
plot(poly_sp)
plot(point_sp, add = TRUE, col = "red", pch = 21, cex = 5)
由 reprex package (v0.2.0) 创建于 2018-05-09。
我正在尝试从 USGS 网络服务 (streamstats) 将 geojson 作为空间对象(即 sp)导入 R,但无法将其转换为 R 的正确格式。
library(jsonlite)
mydata <- fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true")
这个 returns geojson 中的功能加上一堆我不需要的其他东西。我可以 select 只需要我需要的数据框,然后用:
写出来tmp <- mydata$featurecollection[2,2]
write_json(tmp, 'test.json')
[{"type": "FeatureCollection", ...一堆其他东西}]
如果我手动删除 json 文件两端的方括号“[]”,然后我可以将其作为空间对象导入:
library(geojsonio)
test <- geojson_read('test.json', method='local', what='sp')
否则我会得到这个错误:
Error in rgdal::ogrListLayers(input) : Cannot open data source
有没有办法去掉两端的括号?也许还有一个更简单的解决方案,我从 select 出所需的数据框的地方遗漏了。
这个答案假设保存文件是一个必要的步骤(例如,用另一个 Rscript 读取它)。这样,你只进行一次缓慢的外部调用,然后你可以只请求你的本地文件来测试,这样就快多了。此外,外部请求可能并不总是可用。
作为解决方法,您可以删除 write_json 命令行并添加此命令行:
stringJson <- toJSON(tmp)
write(substr(stringJson, 2, nchar(stringJson) - 1), file = 'test.json')
另一种方法是使用 rjson 库来编写 json(但要小心,因为两个库都有同名的函数):
library(jsonlite)
library(rjson)
mydata <- jsonlite::fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true")
tmp <- mydata$featurecollection[2,2]
write(rjson::toJSON(tmp), file = 'test.json')
希望对您有所帮助:)
geojsonio
维护者 ...
因此 rgdal::readOGR
发生了变化,任何比有效文件路径长的 geojson 字符串都会被截断,因此不会被读取。参见 https://github.com/ropensci/geojsonio/issues/130
所以我们为 geojsonio::geojson_sp
做了一个解决方法,但没有为 geojsonio::geojson_read
虽然 jqr
library(jqr)
library(geojsonio)
library(sf)
myurl <- "https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true"
jq(url(myurl), ".featurecollection[1]") %>% st_read(quiet = TRUE, stringsAsFactors = FALSE)
其中 jq
让我们无需先写入磁盘即可进入 JSON
这里还有一位 geojsonio
作者...
我认为 libraries/packages(geojsonio
、rgdal
等)中的任何一个都没有问题,但方括号使它不合适geojson 符合规范的对象(方括号表示数组)。
那个 url returns 一个 json 对象,它包含一个数组(容易混淆地称为 featurecollection
),然后包含两个对象,每个对象包含一个 name
和一个特征,每个特征都是一个合适的geojson
FeatureCollection
。那些 FeatureCollections
是我们想要提取的 - 一个 Point
(可能是分水岭的质心?),一个 Polygon
定义分水岭边界。
library(jsonlite)
library(geojsonio)
library(sp)
# Don't simplify the results so that it's easier to pull out the full geojson objects
mydata <- fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true",
simplifyVector = FALSE, simplifyDataFrame = FALSE)
# Extract each geojson object and 'auto_unbox' to remove square brackets from
# arrays of length 1:
point_geojsonsting <- toJSON(mydata$featurecollection[[1]]$feature,
auto_unbox = TRUE)
poly_geojsonsting <- toJSON(mydata$featurecollection[[2]]$feature,
auto_unbox = TRUE)
# Read directly to sp without writing to disk first:
point_sp <- geojson_sp(point_geojsonsting)
poly_sp <- geojson_sp(poly_geojsonsting)
plot(poly_sp)
plot(point_sp, add = TRUE, col = "red", pch = 21, cex = 5)
由 reprex package (v0.2.0) 创建于 2018-05-09。