Openlayers 2からol3へのマップアプリケーションを移行しており、エクステントが変更されたときにサーバーにリクエストを送信しました。私はリフレッシュ戦略(force:true)を使用し、サーバーはカスタムフォーマットを使用して処理するオブジェクトの配列を返します。Openlayers 2のBBOX戦略からOpenlayersへ3
var refreshStrategy = new OpenLayers.Strategy.Refresh({
force: true
});
OpenLayers.Format.GTFS = OpenLayers.Class(OpenLayers.Format, {
read: function(body) {
var stops = JSON.parse(body), point, features = [];
for(var i=0,l=stops.length; i<l; i++) {
point = new OpenLayers.Geometry.Point(stops[i].stop_lon, stops[i].stop_lat);
features.push(new OpenLayers.Feature.Vector(point, stops[i]));
}
return features;
}
});
var layer = new OpenLayers.Layer.Vector('Stops', {
projection: new OpenLayers.Projection('EPSG:4326'),
visibility: true,
strategies: [
new OpenLayers.Strategy.BBOX({resFactor: 1.2}),
refreshStrategy
],
protocol: new OpenLayers.Protocol.HTTP({
format: new OpenLayers.Format.GTFS(),
url: '/api/v1/stops.json'
})
});
refreshStrategy.activate();
ol.source.Vector
は、1つの戦略しかサポートしていません。私はBBOX戦略を使用してみましたが、機能のマーカーが点滅し、データがのを取得し、私は私が何か間違ったことをやっていると、リフレッシュが遅くなるように見えるような特徴のコレクションの
var stopFeatures = new ol.Collection();
var source = new ol.source.Vector({
features: stopFeatures,
loader: function(extent, resolution, projection) {
extent = ol.extent.applyTransform(extent, ol.proj.getTransform("EPSG:3857", "EPSG:4326"));
var url = '/api/stops.json?bbox=' + extent.join(',');
$http.get(url).then(function (res) {
var features = _.map(res.data, function (stop) {
var stopFeature = new ol.Feature(stop);
stopFeature.setGeometry(new ol.geom.Point(ol.proj.transform([stop.stop_lon,stop.stop_lat],
'EPSG:4326', 'EPSG:3857')));
return stopFeature;
});
stopFeatures.clear();
stopFeatures.extend(features);
});
},
projection: 'EPSG:4326',
strategy: ol.loadingstrategy.bbox,
});
クリアとリセットが感じるパンたびに再読み込み。
map.on('moveend',...
これをol3で実装する方法はありますか?
実際、OpenLayers 3.xの 'ol.loadingstrategy.bbox'はOpenLayers 2の' OpenLayers.Strategy.BBOX'とまったく同じことをします。あなたはそれを "違ったモンスター"だと思いますか? – ahocevar
@ahocevar私はコードを読み、あなたが意味することを理解します。あまり目立たないのは、ol2が後続のリクエストのデータをどのようにマージしていたのか、今はフィーチャコレクションを使用しなければならないということです。私は再挿入される可能性が高い機能をクリアしていますが、おそらくそれが遅くなる原因と思われます。これに注意を払ってくれてどうもありがとう、私はもっと多くの詳細を追加しました。 –