首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Leaflet、Topojson和layergroup

Leaflet、Topojson和layergroup
EN

Stack Overflow用户
提问于 2016-03-03 21:13:32
回答 1查看 565关注 0票数 0

我有一个有三层的地理层:村庄>县>地区。

我的topojson由村庄的多边形组成,并且我有一个json,其中包含农村>县>地区数据。

我这样加载它:

代码语言:javascript
复制
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。然后我猜访问每个管理员级别会更容易;尽管我甚至不确定我是否能处理它。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2016-03-03 22:36:51

我有点困惑,因为我不清楚你的设置/解释,但从我收集的信息来看,我会这么做。您可以将shapefile导出为三个不同的GeoJSON文件,然后将它们转换为一个TopoJSON文件:

代码语言:javascript
复制
topojson -o topo.json -- villages.json counties.json regions.json

然后在客户端,你可以这样做:

代码语言:javascript
复制
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文件来实际测试它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35773184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档