2017-01-24 4 views
0

ベクタレイヤにいくつかのフィーチャをロードしてスタイル機能を持​​たせる必要があります。OL3:フィーチャタイプを特定できない場合のクラスタリングベクタの機能

var features = new ol.format.GeoJSON().readFeatures(geojsonStr, { 
    featureProjection: 'EPSG:3857' 
});   

var vectorSource = new ol.source.Vector({ 
    features: features, 
}); 


/* 
var clusterSource = new ol.source.Cluster({ 
    distance: 15, 
    source: vectorSource 
}); 
*/   

var customStyleFunction = function(feature, resolution) { 
    .... 
} 

var vectorLayer = new ol.layer.Vector({ 
    //source: clusterSource, 
    source: vectorSource, 
    style : customStyleFunction 
}); 

map.addLayer(vectorLayer); 

私はgeojsonStrに取得するジオメトリの種類を知りません。問題は:私のコレクションがタイプ "ポイント"のとき、私はそれをクラスター化することができますが、他のタイプではレイヤーを見ることができません...ポイントをクラスター化し、ポリゴンとラインを無視するにはどうすればいいですか?またはOL3が決定するのに十分なほど巧みになれますか?

EDIT:クラスタリング用と共通ベクトル層のための別の1:私は2つの異なるレイヤーを作成することをお勧めしますhttps://github.com/openlayers/openlayers/pull/4917

+0

したがって、すべての機能を取得し、ポイントである場合にはそれらを個別にチェックしてベクトルソースに追加し、それが他のものであれば完全に無視します。他の機能を使って何か他のことをしたいのですか? – Icarus

+0

いいえ、私はFeatureCollectionを持つGeoJSON文字列を持っています。今のところ、すべてのジオメトリが同じタイプであると推測できます。問題は、コレクションにどのようなジオメトリがあるかを知る前にソースを設定しなければならないことと、 'vectorLayer'で' clusterSource'または 'vectorSource'を使用できるかどうかを判断できません。しかし、(主な問題ではない)混合FeatureCollectionを受け取り、他のジオメトリをそのまま残した点だけをクラスタリングできるなら、(主な問題ではない)素晴らしいだろう。 –

+0

https://github.com/openlayers/openlayers/pull/4917を読んだところ、ほとんどありましたが、 'vectorSource'または' clusterSource'を 'vectorLayer'に付けるために条件付きで条件を選択することはできません。 –

答えて

1

を読みました。

あなたの問題を解決するには、機能をループし、それぞれのジオメトリタイプをチェックし、addFeature方法で既存のソースに追加することができます:私は取得jsfiddleを作成している

for (var i = 0; i < geojsonFeatures.length; i++) { 
    if (geojsonFeatures[i].getGeometry().getType() === 'Point') { 
     clusterSource.addFeature(geojsonFeatures[i]); 
    } else { 
     vectorSource.addFeature(geojsonFeatures[i]); 
    } 
} 

GeoJSONオブジェクトからいくつかのフィーチャを選択し、それらをジオメトリタイプに応じてさまざまなソースに追加します。クラスタが正しく動作しているかどうかを確認するには、コメントされた行も使用できます。

+0

あなたは天才です!素晴らしい解決策!魅力のように働いた。 –

関連する問題