D3 中荷兰的自定义数据图
custom datamap of the Netherlands in D3
我想在我的网站上添加带有省份的荷兰数据地图。但是我以前从未使用过自定义数据图。我相信我有正确的 data 格式 (geoJSON)。我通过将其复制到记事本并另存为 geo_netherlands.json.
来保存它
我试过像这样加载数据图:
var map = new Datamap({
element: document.getElementById('map_netherlands'),
geographyConfig: {
dataUrl: 'data/geo_netherlands.json'
}
});
导致
TypeError: a is null
这是什么意思?调用Datamap的时候是不是应该多给一些参数,json文件不好吗?
您已经很接近了,但是绘制这张地图还需要一些参数。
第一个问题是您正在使用 dataUrl
但试图访问本地数据。您实际上应该使用 dataJson
(未记录)。
其次,您需要通过 scope
参数指定要在 TopoJSON 中使用的几何图形。查看您生成的 TopoJSON,恰好是 "collection".
您还需要为您的容器指定宽度和高度,以便地图有一些 space 可以绘制(否则 height
默认为 HTML 中的 0)。
最后,您需要设置自定义投影以将地图聚焦在荷兰上并进行放大。
全部放在一起,JS 看起来像:
var map = new Datamap({
element: document.getElementById('map_netherlands'),
scope: "collection",
geographyConfig: {
dataJson: data
},
setProjection: function(element) {
var projection = d3.geo.mercator()
.scale(3000)
.center([0, 52])
.rotate([-4.8, 0])
.translate([element.offsetWidth / 2, element.offsetHeight / 2]);
var path = d3.geo.path()
.projection(projection);
return {path: path, projection: projection};
},
});
关于设置项目和生成自定义数据的更多信息,我推荐:http://bost.ocks.org/mike/map/
我强烈建议您看一下 Bostock 的 post,尤其是他生成 TopoJSON 并指定 --id-property
的地方,这对于您定位任何特定地区(创建例如等值线)。
工作的 JSFiddle 在这里:http://jsfiddle.net/L767kzpy/4/
我想在我的网站上添加带有省份的荷兰数据地图。但是我以前从未使用过自定义数据图。我相信我有正确的 data 格式 (geoJSON)。我通过将其复制到记事本并另存为 geo_netherlands.json.
来保存它我试过像这样加载数据图:
var map = new Datamap({
element: document.getElementById('map_netherlands'),
geographyConfig: {
dataUrl: 'data/geo_netherlands.json'
}
});
导致
TypeError: a is null
这是什么意思?调用Datamap的时候是不是应该多给一些参数,json文件不好吗?
您已经很接近了,但是绘制这张地图还需要一些参数。
第一个问题是您正在使用 dataUrl
但试图访问本地数据。您实际上应该使用 dataJson
(未记录)。
其次,您需要通过 scope
参数指定要在 TopoJSON 中使用的几何图形。查看您生成的 TopoJSON,恰好是 "collection".
您还需要为您的容器指定宽度和高度,以便地图有一些 space 可以绘制(否则 height
默认为 HTML 中的 0)。
最后,您需要设置自定义投影以将地图聚焦在荷兰上并进行放大。
全部放在一起,JS 看起来像:
var map = new Datamap({
element: document.getElementById('map_netherlands'),
scope: "collection",
geographyConfig: {
dataJson: data
},
setProjection: function(element) {
var projection = d3.geo.mercator()
.scale(3000)
.center([0, 52])
.rotate([-4.8, 0])
.translate([element.offsetWidth / 2, element.offsetHeight / 2]);
var path = d3.geo.path()
.projection(projection);
return {path: path, projection: projection};
},
});
关于设置项目和生成自定义数据的更多信息,我推荐:http://bost.ocks.org/mike/map/
我强烈建议您看一下 Bostock 的 post,尤其是他生成 TopoJSON 并指定 --id-property
的地方,这对于您定位任何特定地区(创建例如等值线)。
工作的 JSFiddle 在这里:http://jsfiddle.net/L767kzpy/4/