X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=js%2Fsrc%2Fgeo%2FOpenLayersMapPart.js;h=71b9a17b0574dd1539e1eb00c4cc5fa7823598c6;hb=b384a9cbe93b83b3aa94fe46cf2ff0a929f0332c;hp=a75956680ee1e165ebf0151015d973725df8ef62;hpb=3283994ed0bb41099776e8f6ec9b3fbcbc767a84;p=gpl%2Fargeo-suite.git diff --git a/js/src/geo/OpenLayersMapPart.js b/js/src/geo/OpenLayersMapPart.js index a759566..71b9a17 100644 --- a/js/src/geo/OpenLayersMapPart.js +++ b/js/src/geo/OpenLayersMapPart.js @@ -6,7 +6,7 @@ import Map from 'ol/Map.js'; import View from 'ol/View.js'; import OSM from 'ol/source/OSM.js'; import TileLayer from 'ol/layer/Tile.js'; -import { fromLonLat, getPointResolution } from 'ol/proj.js'; +import { fromLonLat, getPointResolution, transformExtent } from 'ol/proj.js'; import VectorSource from 'ol/source/Vector.js'; import Feature from 'ol/Feature.js'; import { Point } from 'ol/geom.js'; @@ -21,6 +21,8 @@ import * as SLDReader from '@nieuwlandgeo/sldreader'; import MapPart from './MapPart.js'; +import { bbox } from 'ol/loadingstrategy'; + /** OpenLayers implementation of MapPart. */ export default class OpenLayersMapPart extends MapPart { /** The OpenLayers Map. */ @@ -46,12 +48,14 @@ export default class OpenLayersMapPart extends MapPart { // transition: 0, // }), ], - // view: new View({ - // center: [0, 0], - // zoom: 2, - // }), + // view: new View({ + // projection: 'EPSG:4326', + // center: [0, 0], + // zoom: 2, + // }), target: this.getMapName(), }); + //this.#map.getView().set('projection', 'EPSG:4326', true); } /* GEOGRAPHICAL METHODS */ @@ -282,4 +286,44 @@ export default class OpenLayersMapPart extends MapPart { }); vectorLayer.setStyle(olStyleFunction); } -} \ No newline at end of file + + // + // BBOX + // + applyBboxStrategy(layerName) { + const layer = this.getLayerByName(layerName); + const vectorSource = layer.getSource(); + const baseUrl = vectorSource.getUrl(); + if (typeof baseUrl === 'function') + throw new Error('A strategy was already applied to layer ' + layerName); + + const loadFunction = function(extent, resolution, projection, success, failure) { + + const proj = projection.getCode(); + var bbox = transformExtent(extent, proj, 'EPSG:4326'); + + const url = baseUrl + '&' + + 'bbox=' + bbox.join(',') ; +// 'bbox=' + extent.join(',') + ',' + proj; + const xhr = new XMLHttpRequest(); + xhr.open('GET', url); + const onError = function() { + vectorSource.removeLoadedExtent(extent); + failure(); + } + xhr.onerror = onError; + xhr.onload = function() { + if (xhr.status == 200) { + const features = vectorSource.getFormat().readFeatures(xhr.responseText); + vectorSource.addFeatures(features); + success(features); + } else { + onError(); + } + } + xhr.send(); + } + + vectorSource.setLoader(loadFunction); + } +}