[英]Is it possible to read geoJSON or topoJSON file in R to draw a choropleth map?
[英]TopoJSON choropleth in R/Leaflet?
是否可以使用R / leaflet从其功能中为TopoJSON文件设置样式? 尝试了一些事情,我不确定leaflet
包是不可能的,或者我没有正确的语法,特别是访问要输入pal()
函数的属性。 这就是我所拥有的:
pal<-colorNumeric(palette ="YlOrRd",domain = USAdata$GINI) #USAdata data frame I merged with the spdf before converting it to shp/topojson
map<-leaflet() %>%
addTiles(options=tileOptions(minZoom = 3)) %>%
setMaxBounds(-167.276413,5.499550,-52.233040, 83.162102) %>%
setView(93.85,37.45,zoom =3) %>%
#addGeoJSON(geojson = jso5)
addTopoJSON(topojson=jso, fillColor = ~pal("GINI"))
#addPolygons(data=poly)
这引发了一个错误:
"Error in UseMethod("doResolveFormula") :
no applicable method for 'doResolveFormula' applied to an object of class "NULL""
我也尝试将它转换为带有fromJSON()的topojson的R对象并添加样式元素,但是在我尝试使用toJSON()将其发回之后,这将不会加载。
不知道是否有关,但topojson从下面的说明进行shape文件创建在这里 :
与cl:
topojson -o 'USApuma.json' --shapefile-encoding utf8 --id-property=+GEOID10 -p GINI,+STATEFP10,+GEOID10 -- 'usaetest.shp'
然后使用readLines()
读入。
你需要使用TopoJSON吗? 如果不考虑使用tigris包(披露:我创建和维护包)。 它可以让您访问您需要的任何Census地理数据集,并且可以很好地使用传单 。 这是一个与您正在做的事情相符的简短示例。 例如,您可以使用以下代码获取美国大陆的所有PUMA:
library(readr)
library(tigris)
library(leaflet)
us_states <- unique(fips_codes$state)[1:51]
continental_states <- us_states[!us_states %in% c("AK", "HI")]
pumas_list <- lapply(continental_states, function(x) {
pumas(state = x, cb = TRUE)
})
us_pumas <- rbind_tigris(pumas_list)
我已经生成了一个样本数据集来衡量这个例子中PUMA的家庭收入中位数; tigris包中的geo_join
函数可以将数据集合并到空间数据框us_pumas
:
puma_income <- read_csv('http://personal.tcu.edu/kylewalker/data/puma_income.csv')
joined_pumas <- geo_join(us_pumas, puma_income, 'GEOID10', 'GEOID')
然后我们可以用Leaflet绘图:
pal <- colorQuantile(palette = 'YlOrRd', domain = joined_pumas$hhincome, n = 7)
leaflet(joined_pumas) %>%
addProviderTiles('CartoDB.Positron') %>%
addPolygons(weight = 0.5, fillColor = ~pal(hhincome),
color = 'lightgrey', fillOpacity = 0.75,
smoothFactor = 0.2) %>%
addLegend(pal = pal,
values = joined_pumas$hhincome)
如果您打算构建一个Shiny应用程序,我建议首先将您从tigris获得的PUMA保存为.rda
文件并使用您的Shiny脚本读取它,这样您就不必每次都使用rbind_tigris
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.