我们尝试使用d3.js和leaflet重现bl.ocks.org/diegovalle/5166482的漂亮示例,但是使用我们自己的数据,这是在常规的lon-lat网格上。
在R中,我们首先从mysql表中检索数据,然后将它们写入shapefile:
lonmin <- -10; lonmax <- 10
latmin <- 30; latmax <- 50
dlon <- dlat <- 0.5
lon <- seq(from=lonmin, to=lonmax, by=dlon)
lat <- seq(from=latmin, to=latmax, by=dlat)
nlon <- length(lon); nlat <- length(lat)
# cl <- a mysql request
solRad <- matrix(cl$solRad, ncol=nlon, nrow=nlat)
# Plot the data
levels=seq(from=-40, to=1000, by=40)
filled.contour(solRad, x=lon, y=lat, levels=levels, col=col)
# Write a shapefile
require(maptools); require(rgdal)
writeOGR(ContourLines2SLDF(contourLines(lon, lat, solRad, levels=levels)),
"solRad.shp", "contours", "ESRI Shapefile")
您可以查看filled.contour输出![here] http://www.jonxion.ch/5166482/solRad.png。然后我们将shape文件转换为topojson文件,您可以通过用.json替换上面链接中的.png来找到它。
最后,我们用D3.js和Leaflet渲染它,导致这个错误的结果[这里] http://www.jonxion.ch/5166482/
我们浏览了许多教程和其他示例,却没有找到问题的提示。我们做错了什么?
这可能是d3.js的限制吗?我们认识到我们的数据更复杂,但Diegovalle的数据也包含未闭合的轮廓(见左上角)。写ContourPolygones而不是ContourLines会解决我们的问题吗?这样的例程是否存在?或者,d3.js有替代技术吗?在此先感谢您的帮助!