Me di cuenta de que OpenLayers no "cargará" la fuente a menos que esté asignada a una capa que esté asignada al mapa .
Este código hace console.log() con varias funciones en una capa KML:
const layer = new Heatmap({ source: new VectorSource({ url: file, format: new KML({ extractStyles: false, }), }), }); layer.getSource().on('change', function (evt: any) { var source = evt.target; if (source.getState() === 'ready') { var numFeatures = source.getFeatures().length; console.log('Count after change: ' + numFeatures); } }); this.map.addLayer(layer);Si elimino esta línea:
this.map.addLayer(layer);no da salida a nada. Tengo la sensación de que OpenLayers lo ignora porque no se usa. ¿Hay alguna forma de obligar a OpenLayers a cargarlo?
(contexto: me gustaría combinar las características que provienen de varias fuentes en una sola, por lo que no quiero cargarlas directamente en el mapa . Me gustaría que se carguen para poder obtener características y luego combinar estas características en una matriz y luego muestre esta matriz en el mapa )
Puede combinar funciones de varios archivos y formatos obteniendo las direcciones URL y utilizando el método readFeatures() del formato.
const vectorSource = new VectorSource(); const layer = new Heatmap({ source: vectorSource, }); function loadFromUrl (url, format) { fetch(url).then(function (response) { response.text().then(function (result) { vectorSouce.addFeatures( format.readFeatures(result, { dataProjection: 'EPSG:4326', featureProjection: map.getView().getProjection(), }) } }); } loadFromUrl(kmlFile, new KML({extractStyles: false})); loadFromUrl(geojsonFile, new GeoJSON());