forked from Snck3rs/contao-leaflet-maps
Fix dynamic data loading for new request url.
This commit is contained in:
34
js/Contao.js
34
js/Contao.js
@@ -139,6 +139,7 @@ L.Contao = L.Evented.extend({
|
||||
* @param map Pass a map object so that the data loading events are passed to the map.
|
||||
*/
|
||||
loadUrl: function (url, type, options, customLayer, map) {
|
||||
url = this.applyFilterToUrl(url, map);
|
||||
var layer = omnivore[type](url, options, customLayer);
|
||||
|
||||
if (map) {
|
||||
@@ -147,7 +148,7 @@ L.Contao = L.Evented.extend({
|
||||
|
||||
// Add listener for map bounds changes.
|
||||
if (map.options.dynamicLoad && layer.options.boundsMode == 'fit') {
|
||||
layer.options.requestHash = hash;
|
||||
layer.options.requestUrl = url;
|
||||
map.on('moveend', layer.refreshData, layer);
|
||||
|
||||
map.on('layerremove', function(e) {
|
||||
@@ -326,6 +327,37 @@ L.Contao = L.Evented.extend({
|
||||
}
|
||||
|
||||
return value;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Apply the filter to a request url.
|
||||
*
|
||||
* @param {string} url The request url.
|
||||
* @param {L.Map} map The map.
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
applyFilterToUrl: function (url, map) {
|
||||
var value, query, bounds;
|
||||
|
||||
if (!map || !map.options.dynamicLoad) {
|
||||
return url;
|
||||
}
|
||||
|
||||
url = new URL(url);
|
||||
query = new URLSearchParams(url.search);
|
||||
|
||||
bounds = map.getBounds();
|
||||
value = bounds.getSouth() + ',' + bounds.getWest();
|
||||
value += ',' + bounds.getNorth() + ',' + bounds.getEast();
|
||||
|
||||
query.set('filter', 'bbox');
|
||||
query.set('values', value);
|
||||
|
||||
url.search = query.toString();
|
||||
|
||||
return url.toString();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -29,6 +29,6 @@ L.GeoJSON.include({
|
||||
});
|
||||
|
||||
// TODO: Allow other data formats.
|
||||
omnivore.geojson(L.contao.createRequestUrl(this.options.requestHash, e.target), null, dataLayer);
|
||||
omnivore.geojson(L.contao.applyFilterToUrl(this.options.requestUrl, e.target), null, dataLayer);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user