在R中,我想帮助尝试复制教程here以获取我自己的自定义SHP(Shapefile)文件或映射为交互式等值区域图...
该地图属于北爱尔兰的小地区。可以找到here。
以下是我到目前为止采取的步骤......
我认为问题在于设置geographyConfig
数据......
非常感谢任何帮助......
# Download and unzip the data
system('wget http://www.nisra.gov.uk/archive/geography/digital_products/SA2011_Esri_Shapefile.zip')
system('unzip SA2011_Esri_Shapefile.zip')
# Load libraries
library(rgdal)
library(rgeos)
library(rMaps)
shp.file <- 'SA2011.shp'
# Convert projection
system(paste0('ogr2ogr tmp.shp ',
shp.file,
' -t_srs "+proj=longlat +ellps=WGS84 +no_defs +towgs84=0,0,0"'))
# Read in the data
xx <- readOGR(dsn=getwd(),layer='tmp')
mm <- xx@data
head(mm)
n <- nrow(mm)
dat.val <- mm$Hectares
# Add extra year data
mm <- mm[rep(seq(n),3),]
mm$Hectares <- c(dat.val,rev(dat.val),dat.val/2)
mm$year <- rep(c(2000:2002),each=n)
colnames(mm)[1] <- 'ID'
id.var <- 'SA2011'
# Convert to json
system(paste0('topojson -o tmp.json -s 1e-7 -q 1e5 tmp.shp -p ID=',
id.var,
' --id-property ',
id.var))
d1 <- ichoropleth(Hectares ~ ID, data = mm, ncuts = 9, pal = 'YlOrRd',
animate = 'year', map = 'states'
)
d1$set(
geographyConfig = list(
dataUrl = "tmp.json"
),
scope = 'states',
setProjection = '#! function( element, options ) {
var projection, path;
projection = d3.geo.mercator()
.center([-7, 55]).scale(element.offsetWidth)
.translate([element.offsetWidth / 2, element.offsetHeight / 2]);
path = d3.geo.path().projection( projection );
return {path: path, projection: projection};
} !#'
)
d1$save('rMaps.html', cdn = TRUE)
加载rMaps.html
不会生成相关地图,因为它只显示底部的切割而不是地图。
答案 0 :(得分:1)
recordnotfound.com上的各种人要求作者回复此帖子(在recordnotfound.com上)。我与rMaps项目的所有者Ramnath取得了联系。他建议有一个新项目提供增强的功能集:http://github.com/rstudio/leaflet
以下是有关传单项目的更多详细信息:https://recordnotfound.com/leaflet-rstudio-35205
答案 1 :(得分:0)
你见过http://www.r-bloggers.com/rmaps-mexico-map/吗? 我遇到了类似的问题,并发现对于小规模区域,您需要在下面的代码中操作scale参数。它确实有效。
d1$set(
geographyConfig = list(
dataUrl = "tmp.json"
),
scope = 'tmp',
setProjection = '#! function( element, options ) {
var projection, path;
projection = d3.geo.mercator()
.center([-5.832087, 54.605035]).scale(element.offsetWidth)
.translate([element.offsetWidth / 2, element.offsetHeight / 2]);
path = d3.geo.path().projection( projection );
return {path: path, projection: projection};
} !#'
)
d1$save('rMaps.html', cdn = TRUE)