英文:
Reading geojson file to convert to sf
问题
I have a geojson file which i need to read/convert to sf object.
我有一个GeoJSON文件,我需要将其读取/转换为sf对象。
I read it with geojsonR
package and it shows as lists of lists, but i need it to sf.
我使用geojsonR
包读取了它,它显示为列表的列表,但我需要将其转换为sf对象。
I tried using st_read
as suggested here but it gives me "Error:
dsn must point to a source, not an empty string."
我尝试使用st_read
,如这里建议的,但它给我返回了"Error:
dsn must point to a source, not an empty string."
。
Also tried geojsonsf
package and geojson_sf()
and it gives me "Error in rcpp_geojson_to_sf(geojson, expand_geometries) : Invalid JSON"
我还尝试了geojsonsf
包和geojson_sf()
,但它给我返回了"Error in rcpp_geojson_to_sf(geojson, expand_geometries) : Invalid JSON"
。
how can i read it as sf and more importantly - i need sf geometry from there...
我该如何将其读取为sf对象,更重要的是 - 我需要从中获取sf的几何信息...
The file is here link
该文件在这里 链接。
英文:
I have a geojson file which i need to read/convert to sf object
I read it with geojsonR
package and it shows as lists of lists, but i need it to sf.
I tried using st_read
as suggested here but it gives me "Error:
dsn must point to a source, not an empty string."
Also tried geojsonsf
package and geojson_sf()
and it gives me "Error in rcpp_geojson_to_sf(geojson, expand_geometries) : Invalid JSON"
how can i read it as sf and more importantly - i need sf geometry from there...
The file is here https://vustaff-my.sharepoint.com/:u:/g/personal/e5028514_vu_edu_au/ERKzUBrFobBKrNe7ga-3arMB63ZuyD4eDbAtPQ5fzy2BbQ?e=m87Af9
答案1
得分: 4
以下是翻译好的部分:
如果您查看您的 'json'(它不是有效的 .geojson),您会发现它实际上是一组嵌套的 geojson 对象。
使用您的示例,我正在执行以下操作:
- 使用
readLines
将 .geojson(实际上是 .json)文件作为纯文本进行读取。 - 使用
jqr
检查一级属性。
请注意,有 8 个不同的 geojson 对象。
您可以通过在解析之前筛选 json 来读取它们,使用 geojsonsf
或 sf
。
还请注意,.geojson 必须使用 CRS 4326 才能有效。看起来这个数据不是在这个 CRS 下的。
英文:
If you look at your 'json' (it's not valid .geojson) you'll see it's actually a set of nested geojson objects
Using your example, I'm
- reading the .geojson (which is actually .json) file as plain text using
readLines
. - Inspecting the first-level properties using
jqr
txt <- paste0(readLines("~/Downloads/test.geojson"), collapse = "")
library(jqr)
jq(txt, "keys")
# [
# "grunnkretser.delomradegrense",
# "grunnkretser.fylkesgrense",
# "grunnkretser.grensesjo",
# "grunnkretser.grunnkrets",
# "grunnkretser.grunnkretsgrense",
# "grunnkretser.kommunegrense",
# "grunnkretser.riksgrense",
# "grunnkretser.territorialgrense"
# ]
See there are 8 different geojson objects.
You can read each of them by filtering the json before parsing through geojsonsf
or sf
library(geojsonsf)
library(sf)
sf_delomradegrense <- jq(txt, '.["grunnkretser.delomradegrense"]') %>%
geojsonsf::geojson_sf()
sf_delomradegrense
# Simple feature collection with 10284 features and 7 fields
# Geometry type: LINESTRING
# Dimension: XY
# Bounding box: xmin: 4010764 ymin: 3853260 xmax: 5097468 ymax: 5425159
# Geodetic CRS: WGS 84
# First 10 features:
# objid datafangstdato folgerterrengdetalj malemetode oppdateringsdato objtype noyaktighet geometry
# 1 1 <NA> 99 20160126000000 Delområdegrense <NA> LINESTRING (4404964 4628261...
# 2 2 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4616126 5145684...
# 3 3 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4101761 4257071...
# 4 4 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4129652 4122672...
# 5 5 <NA> 99 20170908000000 Delområdegrense <NA> LINESTRING (4303917 4481500...
# 6 6 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4607806 5150974...
# 7 7 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4300691 4485384...
# 8 8 <NA> 99 20170712000000 Delområdegrense <NA> LINESTRING (4396353 4104326...
# 9 9 <NA> 99 20170908000000 Delområdegrense <NA> LINESTRING (4396353 4104326...
# 10 10 <NA> 99 20131027000000 Delområdegrense <NA> LINESTRING (4627750 5166350...
Also note that .geojson must be in CRS 4326 for it to be valid. It doesn't look like this data is.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论