我有一个包含3000多条记录的数据框架,其中包括每次观测的经纬度坐标。我想从每一组坐标中得到国家和州或省。
或者,一个更好的解决我的问题,获得空间信息是赞赏的!
下面是我的代码:
library(RDSTK)
library(httr)
library(rjson)
Coords <- structure(list(Latitude = c(43.30528, 46.08333, 32.58333, 46.25833, 45.75, 46.25, 45.58333, 45.58333, 44.08333, 45.75),
Lontitude = c(-79.80306, -82.41667, -117.08333, -123.975, -85.75, -123.91667, -86.75, -86.75, -76.58333, -85.25
)), .Names = c("Latitude", "Longitude"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L,9L, 10L), class = "data.frame")
json_file <- fromJSON(coordinates2politics(Coords$Latitude, Coords$Longitude))
我更喜欢在R中使用jsonlite
解析JSON。
要解析嵌套的JSON列表,可以在lapply
中执行fromjson
调用。
JSONLite::FromJSON
试图简化结果。但是,由于JSON被设计为处理嵌套的数据结构,所以通常会返回一个列表的data.frame,因此要获得您要获取的data.frame
,您需要知道您想要的列表中的哪个元素,并提取它。
例如
library(RDSTK)
library(jsonlite)
js <- coordinates2politics(Coords$Latitude, Coords$Longitude)
lst <- lapply(js, jsonlite::fromJSON)
lst[[1]]$politics
# type friendly_type name code
# 1 admin2 country Canada can
# 2 admin4 state Ontario ca08
# 3 constituency constituency Hamilton Centre 35031
# 4 constituency constituency Burlington 35010
# 5 constituency constituency Hamilton East-Stoney Creek 35032
要获取data.frame
,可以构造另一个lapply
来提取所需的元素,然后将其与do.call(...,rbind)
或我的首选项与data.table::rbindlist(...)
放在一起
lst_result <- lapply(lst, function(x){
df <- x$politics[[1]]
df$lat <- x$location$latitude
df$lon <- x$location$longitude
return(df)
})
data.table::rbindlist(lst_result)
# type friendly_type name code lat lon
# 1: admin2 country Canada can 43.30528 -79.80306
# 2: admin4 state Ontario ca08 43.30528 -79.80306
# 3: constituency constituency Hamilton Centre 35031 43.30528 -79.80306
# 4: constituency constituency Burlington 35010 43.30528 -79.80306
# 5: constituency constituency Hamilton East-Stoney Creek 35032 43.30528 -79.80306
# 6: admin2 country Canada can 46.08333 -82.41667
# 7: admin4 state Ontario ca08 46.08333 -82.41667
或者,要获得关于每个LAT/LON的更多细节,您可以通过库(googleway)
(免责声明:我写了googleway)使用Google的API,对LAT/LON进行反向地理编码。
为此,您需要一个有效的Google API密钥(除非您付费,否则每天仅限2500个请求)
library(googleway)
key <- "your_api_key"
lst <- apply(Coords, 1, function(x){
google_reverse_geocode(location = c(x["Latitude"], x["Longitude"]),
key = key)
})
lst[[1]]$results$address_components
# [[1]]
# long_name short_name types
# 1 Burlington Bay James N. Allan Skyway Burlington Bay James N. Allan Skyway route
# 2 Burlington Burlington locality, political
# 3 Halton Regional Municipality Halton Regional Municipality administrative_area_level_2, political
# 4 Ontario ON administrative_area_level_1, political
# 5 Canada CA country, political
# 6 L7S L7S postal_code, postal_code_prefix
或者类似地通过库(ggmap)
,这也受到Google的2500个限制。
library(ggmap)
apply(Coords, 1, function(x){
revgeocode(c(x["Longitude"], x["Latitude"]))
})
# 1
# "Burlington Bay James N. Allan Skyway, Burlington, ON L7S, Canada"
# 2
# "308 Brennan Harbour Rd, Spanish, ON P0P 2A0, Canada"
# 3
# "724 Harris Ave, San Diego, CA 92154, USA"
# 4
# "30 Cherry St, Chinook, WA 98614, USA"
# 5
# "St James Township, MI, USA"
# 6
# "US-101, Chinook, WA 98614, USA"
# 7
# "2413 II Rd, Garden, MI 49835, USA"
# 8
# "2413 II Rd, Garden, MI 49835, USA"
# 9
# "8925 S Shore Rd, Stella, ON K0H 2S0, Canada"
# 10
# "Charlevoix County, MI, USA"
我有JSON: 如何将年龄值分配给Kotlin中JSON中的user_age变量?或者用JSON输出年龄值?
问题内容: 我在将选项卡中的JSON输出到HTML表时遇到了麻烦(这是javascript / jQuery夜间课程分配的一部分)。请有人看看,并建议我要对表格格式的输出进行哪些修改?我收到成功警报,但表未填充。 谢谢。 和HTML: 问题答案: 代码的主要问题是,在AJAX请求成功完成后,您没有调用任何函数。您至少需要致电才能填充数据。 但是,您可以对代码进行一些改进。首先,删除。这是默认值,并
问题在于在进行案例类提取时映射函数中。case类不可序列化。我隐式地定义了格式。 错误是: INFO[main](TypeExtractor.java:1804)-未检测到类组织的字段。json4s。JsonAST$JValue。不能用作PojoType。将作为线程“main”组织中的GenericType异常处理。阿帕奇。Flink。应用程序编程接口。常见的InvalidProgrameExce
数据:“{\”数据\“:[\”124“,\”611“]}”,Lasteventid:“”} 是否可以只抓取,因为否则客户端在反序列化方面会出现问题。
问题内容: 我有一个用Java编写的exe文件。我知道可以将Java程序制作为exe,并且有将jar文件转换为exe的工具,但是可以转换回来吗?AFAIK jar文件可以在可以运行Java的任何平台上运行,我想在Mac上使用Windows编译的Java程序,而无需使用任何额外的虚拟化(葡萄酒,vmware) 问题答案: 这取决于exe的构建方式: 如果它只是用JSmooth之类的工具(如该线程所建
问题内容: 我有这个模板: 呈现为: 如果我将其发送到http.ResponseWriter,则输出文本将转义。 我怎么能这样写一个json? 问题答案: 您不应该使用Go的模板引擎(也不是)来生成JSON输出,因为模板引擎不了解JSON语法和规则(转义)。 而是使用包来生成JSON。您可以用来直接将响应写入/流式传输到,例如。 例: 输出(在Go Playground上尝试):