2017-04-06 77 views
0

不知道如何做到這一點:JSON解析到一個數據幀

我有存儲這樣的(在a)一個東西:

[ 
    "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))" 
] 

typeof(a) # prints "character" 
class(a) # prints "json" 

而且我想將其轉換爲一個data.frame看起來像這樣(無需圓的數字,鍵入這只是更容易)

X1 X2 
1 -95 40 
2 -94 40 
3 -94 40 
4 -95 40 

我試圖

a.df<-as.data.frame(as.matrix(a)) 

但打印

V1 
1 [\n "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))"\n]\n 
+0

這看起來並不像有效的JSON。你確定這個文件格式沒有其他名字嗎? – MrFlick

回答

1
library(sf) 
library(jsonlite) 
library(tidyverse) 

x <- fromJSON('[ 
    "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))" 
]') 

map(x, st_as_sfc) %>% 
    map(~as.data.frame(.[[1]][[1]])) 
## [[1]] 
##  X1  X2 
## 1 -95.0 40.99999 
## 2 -94.5 40.99999 
## 3 -94.5 40.49999 
## 4 -95.0 40.49999 

現在:

wkt2geojson('[ 
    "MULTIPOLYGON (((-95.0000000372529 40.999989970587194, -94.5000000372529 40.999989970587194, -94.5000000372529 40.499989970587194, -95.0000000372529 40.499989970587194)))" 
]') 

還有點兒工作,但扔警告。

瞭解在這種配置下創建此WKT的實際來源將會有所幫助