2015-06-15 3 views
0

Я использую Mapbox.js с браузером. Я хочу создать модуль, который создает карту, если она еще не существует, но обновляет ее, если это произойдет.Mapbox.js: очистить пользовательскую легенду?

У меня есть почти все пути, но у меня проблемы с обновлением пользовательской легенды. Я только, кажется, могу добавить к нему и не могу его очистить.

Это мой код:

var analyseMap = { 
    setUpMap: function(options) { 
    var _this = this; 
    L.mapbox.accessToken = 'mytoken'; 
    if (typeof this.map === 'undefined') { 
     this.map = L.mapbox.map('map', 'mapbox.streets').setView([53.1, -2.2], 6); 
     this.layerGroup = L.layerGroup().addTo(this.map); 
    } else { 
     this.layerGroup.clearLayers(); 
    } 
    var geojson_url = "/api/1.0/myurlbasedonoptions"; 
    $.getJSON(geojson_url, function(boundaries) { 
     var orgLayer = L.geoJson(boundariesWithData, { style: getStyle }); 
     _this.layerGroup.addLayer(orgLayer); 
     _this.map.fitBounds(orgLayer.getBounds()); 
     var popup = new L.Popup({ autoPan: false }); 

     var legendHtml = _this.getLegendHTML(options); 
     _this.map.legendControl.removeLegend(); 
     _this.map.legendControl.addLegend(legendHtml); 

Тогда я называю это из другого модуля, как это:

// on initialise and update 
map.setUpMap(someOptions); 

Это работает только большой первый раз, когда я называю его. Тем не менее, при обновлении обновления карт и уровни обновляются красиво, но я получаю две легенды.

Как очистить существующую легенду перед добавлением новой?

documentation предполагает, что мне нужно знать значение легенды HTML, чтобы удалить его, что кажется странным.

ответ

1

ОК, я установил его, делая это:

if (typeof _this.legendHtml !== 'undefined') { 
    _this.map.legendControl.removeLegend(_this.legendHtml); 
} 
_this.legendHtml = _this.getLegendHTML(_this.quintiles, options); 
_this.map.legendControl.addLegend(_this.legendHtml); 

ли еще будет интересно посмотреть, если у кого есть более элегантное решение, хотя!

+0

Я думал, что это может быть полезно, но похоже, что ваш подход более надежный. '_this.map.legendControl.removeFrom (_this.map);' –

Смежные вопросы