がここに私のシナリオである第二の時間をフィルタリング設定できません。ページがロードされ、マップは空のベクターレイヤーで読み込まれます。だからこそ、機能はない。ユーザがボタンをクリックすると、CQLフィルタはCQL設定に従って機能をロードします。これを実装するは、WFSは
私の方法論。私は空のベクトル層を設定しました。loader
またはstrategy
はありません。
は
loader
今loader
は、コールが存在することベクター層から
strategy
を設定:ユーザが最初にクリックボタンは、「初期化」機能(=firstTimeOnly()
)それを呼び出し
が- 今「フィルタリング」機能がボタンに取り付けられ、を呼び出さローダのCQLフィルタ及び負荷の機能をリセットすることを別の「フィルタリング」機能(=
changeFilter()
)クリックするたびに10 「初期化」機能は、その目的
を務め、ボタンから自分自身を切り離します。ここで
私のコードは、これは、CQLフィルタのリセットのためにerilem's codeに基づいており、私はちょうど使用している場合、彼のコードが正常に動作している
<button id= "magicButton", onclick="firstTimeOnly()">Click me</button>
//set globals to use them
var cqlFilter = "name='testpoint9'";
var urlTemplate = 'http://localhost:5550/geoserver/mymap/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=mymap:layerName&CQL_FILTER={{CQLFILTER}}&outputFormat=application/json';
var loader = function (extent) {
var url = urlTemplate.replace('{{CQLFILTER}}', cqlFilter);
$.ajax(url, {
type: 'GET',
success: function(response) {
var res = response;
var geojsonFormat = new ol.format.GeoJSON();
sourceVector.addFeatures(geojsonFormat.readFeatures(response));
}
})
};
var strategy = new ol.loadingstrategy.tile(ol.tilegrid.createXYZ({maxZoom: 20}));
//empty vector source
var sourceVector = new ol.source.Vector({});
function changeFilter() {
//remove all, set cql and reload
var featsToRemove = layerVector.getSource().getFeatures();
for (var f=0;f<featsToRemove.length;f++)
{
layerVector.getSource().removeFeature(featsToRemove[f]);
}
cqlFilter = "name LIKE 'p'";
sourceVector.clear(true);
}
layerVector = new ol.layer.Vector({
source: sourceVector,
style:styleFunction
});
function firstTimeOnly() {
sourceVector.set('loader', loader);
sourceVector.set('strategy', strategy);
changeFilter();
document.getElementById("magicButton").removeEventListener("click", firstTimeOnly, false);
document.getElementById("magicButton").addEventListener("click", changeFilter, false);
}
です。しかし、空のレイヤーから始めて上記のように編集したい場合は、何も得られません。私のコードはエラーを出さない。しかし、ボタンをクリックすると何も得られません。
どのようにこの問題を解決するために私をadvideしてください。あるいは、その過酷さと、あなたはもっとスマートなものを提案します。
おかげ
UPDATE
を私はローダ機能を取得changeFilterの終わりに
console.log("loader "+sourceVector.get('loader'));
を置く場合。最初のボタンをクリックすると、firstTimeOnlyは実際にローダーを設定し、changeFilterを呼び出します。だから、ローダーはありますが動作しませんか?どんな助け?
はい、あなたは正しいです、JavascriptとないOpenLayersをしてリスナーを追加/削除に関係しています。申し訳ありませんが、私は2,3日間行かなければならなかったし、PCにアクセスできないので、私はあなたに賞金ポイントを与えることができませんでした。最初の答えはポイントを自動的に取ると仮定します。あなたはそれを手に入れましたか? – slevin
私はそれが期限切れの時までに何の票もなかったのでおそらくなかった。しかし、心配はありません。 – fuzetsu