在MapBox中设置geoJSON要素图层样式

时间:2014-04-26 00:35:44

标签: javascript geojson mapbox

我刚刚开始使用MapBox,我遇到了一个令人困惑的问题。我使用以下代码创建了一个包含geoJSON图层的地图:

var map = L.mapbox.map('map', '<MapBoxID>');
            var zipLayer = L.mapbox.featureLayer('data/blah.json');
            zipLayer.addTo(map);
            zipLayer.setStyle({color: 'red'});

地图出现并显示geoJSON,但它忽略了样式。当我在浏览器中将最后一行复制到JS控制台时,它可以正常工作。

我在这里缺少什么?另外,我已经尝试了至少十几种不同的方式在featureLayer()调用中直接包含选项中的样式,但没有任何效果。如何在创建要素图层时指定样式?

3 个答案:

答案 0 :(得分:4)

我在这里猜一点,因为我不太了解Mapbox JS,但听起来很像异步错误。奇怪的是,我没有在Mapbox或Leaflet API中看到有关此函数回调的任何内容。但是,您可以直接将GeoJSON传递给featureLayer(),因此我建议使用jQuery(或您选择的XHR库)来获取数据:

var map = L.mapbox.map('map', '<MapBoxID>');
var zipLayer;

$.getJSON('data/blah.json', function(data) {
    zipLayer = L.mapbox.featureLayer(data);
    zipLayer.addTo(map);
    zipLayer.setStyle({color: 'red'});
});

希望能够做到这一点。

答案 1 :(得分:3)

我会使用内置的featureLayer函数,然后听它准备就绪。这应该有助于您指出正确的方向:

var featureLayer = L.mapbox.featureLayer()
    .loadURL('/example-single.geojson')
    .on('ready', function(layer) {
        this.eachLayer(function(marker) {
            // See the following for styling hints:
            // https://help.github.com/articles/mapping-geojson-files-on-github#styling-features
            marker.setIcon(L.mapbox.marker.icon({
                'marker-color': '#CC0000'
            }));
        });
    })
    .addTo(map);

答案 2 :(得分:1)

您是否尝试在设置样式后添加zipLayer?