我有一个有三层的地理层:村庄>县>地区。
我的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);
}我想在地图上显示三个层次:村庄,县和地区。我之前已经成功地使用了layergroup,并且我正在考虑使用它来添加一个控件来切换每个管理级别。我还想以不同的方式设计每个管理级别。
我本来想直接在地图上做的..否则,我看到的唯一解决方案是创建三个shapefile,每个管理员级别一个,然后为三个层创建一个topojson。然后我猜访问每个管理员级别会更容易;尽管我甚至不确定我是否能处理它。
有什么建议吗?
发布于 2016-03-03 22:36:51
我有点困惑,因为我不清楚你的设置/解释,但从我收集的信息来看,我会这么做。您可以将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文件来实际测试它。
https://stackoverflow.com/questions/35773184
复制相似问题