我有一个有三个级别的地理层:village>县>区域。
我的topojson由村庄的多边形组成,我有一个包含村庄的json>县>区域数据。
我这样加载:
L.TopoJSON = L.GeoJSON.extend({
addData: function(jsonData) {
if (jsonData.type === "Topology") {
for (key in jsonData.objects) {
geojson = topojson.feature(jsonData, jsonData.objects[key]);
L.GeoJSON.prototype.addData.call(this, geojson);
}
}
else {
L.GeoJSON.prototype.addData.call(this, jsonData);
}
}
});
var topoLayer = new L.TopoJSON();
var village = {};
$.getJSON('data/villages_data.json', function(data) {
village = data;
$.getJSON('data/villages_geo.json').done(addTopoData);
});
function addTopoData(topoData){
topoLayer.addData(topoData);
topoLayer.addTo(map);
topoLayer.eachLayer(handleLayer);
}
我想在地图上显示三个级别:村庄,县和地区。我之前设法使用了图层组,我正在考虑使用它来添加控件来切换每个管理级别。 我还希望以不同的方式设置每个管理级别的样式。
我本来希望直接在地图中这样做..否则我看到的唯一解决方案是制作三个shapefile,每个管理级别一个,然后为三个层制作一个topojson。然后我想这会更容易访问每个管理员级别;虽然我甚至不确定我会处理它。
有什么建议吗?
答案 0 :(得分:1)
有点困惑,因为我不清楚你的设置/解释,但从我收集的内容,这里是我会做什么。您可以将shapefile导出为三个不同的GeoJSON文件,并将它们转换为一个TopoJSON文件:
topojson -o topo.json -- villages.json counties.json regions.json
然后在客户端,您可以这样做:
var overlays = {
'villages': new L.GeoJSON(null, {
'style': function () {
return {
'color': 'red'
}
}
}),
'counties': new L.GeoJSON(null, {
'style': function () {
return {
'color': 'green'
}
}
}),
'regions': new L.GeoJSON(null, {
'style': function () {
return {
'color': 'blue'
}
}
})
};
var control = new L.Control.Layers(null, overlays).addTo(map);
$.getJSON('topo.json', function (topo) {
for (key in topo.objects) {
var geo = topojson.feature(topo, topo.objects[key]);
overlays[key].addData(geo);
}
});
沿着这些方向做了一些事情,但请注意:将它作为伪/未经测试的代码,因为我是徒手写的,并且没有手动获得正确的TopoJSON文件来实际测试它。