Lagi

Cara memperbarui parameter url (CQL_FILTER) di OpenLayers 3


Saya memiliki pengaturan lapisan vektor dengan Filter CQL:

vectorSource = new ol.source.Vector({ loader: function (luas, resolusi, proyeksi) { var url = 'http://server01:8080/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature& ' + 'typename=sf:TABLE01&' + 'CQL_FILTER=ID=355&' + 'outputFormat=text/javascript&' + 'format_options=callback:gotFetch'; // gunakan jsonp: false untuk mencegah jQuery menambahkan "callback" / / parameter ke URL $.ajax({ url: url, tipe data: 'jsonp', jsonp: false }); } });

Saya ingin pengguna menekan tombol dan memperbarui id di atas ke 455 (Saya ingin menyegarkan lapisan dengan data CQL_FILTER terbaru):

CQL_FILTER=ID=455

Dan kemudian menyegarkan lapisan. Bagaimana saya bisa menyegarkan Lapisan WFS?

(Saya juga membutuhkan lapisan wfs karena saya sedang menyiapkan penanda, saya tidak dapat menggunakan lapisan WMS)

Ini tidak berhasil (gotFetch tidak dipanggil):

var params = { CQL_FILTER: 'ID=455' }; vectorSource.updateParams(params);

Anda dapat menyimpan filter CQL dalam variabel di luar fungsi loader, dan memanggilvectorSource.clear(benar)setelah mengubah filter CQL.

Sesuatu seperti ini:

var cqlFilter = 'ID=355'; var urlTemplate = 'http://server01:8080/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature&' + 'typename=sf:TABLE01&' + 'CQL_FILTER={{CQLFILTER}}&' + 'outputFormat=text/javascript&' + 'format_options=callback:gotFetch'; var vectorSource = new ol.source.Vector({ loader: function(luas, resolusi, proyeksi) { var url = urlTemplate.replace('{{CQLFILTER}}', cqlFilter); $.ajax({url: url, dataType : 'jsonp', jsonp: false}); } }); fungsi changeFilter() { cqlFilter = 'ID=455'; vectorSource.clear(benar); }