0

私は を使用しており、現在この例 (アニメーション クラスター戦略)gwt-openlayers-1.0を学習しています。

私のプロジェクトでは、それぞれVectoreFeatureに数値ラベルがあり、各クラスター ポイントの基になるポイントのラベル値の合計を表示したいと考えています。それを行う方法はありますか?

upd: JS のこの
記事 (「最も重要な」戦略の部分) に よると、次のようになります。

// for each feature:
feature.attributes = { result_count: 10 };
...
var style = new OpenLayers.Style({
  ...
  } , context: {
    label: function(feature) {
      if (feature.cluster) {
        var result_count = 0;
        for (var i = 0; i < feature.cluster.length; i++) {
          result_count += feature.cluster[i].attributes.result_count;
        }
        features.attributes.label = result_count.toString();
      } else {
        features.attributes.label = features.attributes.result_count.toString();
      }
    }
  }

しかし、gwt-openlayers でこれを実装する方法が見つかりません。

org.gwtopenmaps.openlayers.client.Style style = new org.gwtopenmaps.openlayers.client.Style();
style.setLabel( ??? ); 
4

3 に答える 3

1

あなたが求めることを行うために、ポップアップ付きのアニメーションクラスターの例を強化しました。ただし、これがオンラインになるまでには時間がかかります。

私が行った変更は次のとおりです。

最初に、マップに追加された各フィーチャに属性を追加しました。この機能は、クラスター化された機能をクリックしたときに合計を表示したい乱数です​​。

for (int i = 0; i < points.size(); i++)
{
   features[i] = new VectorFeature(points.get(i));
   Attributes attributes = new Attributes();
   attributes.setAttribute("examplenumber", Random.nextInt(10));
   features[i].setAttributes(attributes);
} 

2 番目の変更は public void onFeatureSelected(FeatureSelectedEvent eventObject) にあります。

int totalNumber = 0;
VectorFeature[] clusters = eventObject.getVectorFeature().getCluster();
for (int i = 0; i < clusters.length; i++)
{
   GWT.log("examplenumber = " + clusters[i].getAttributes().getAttributeAsInt("examplenumber"));
   totalNumber += clusters[i].getAttributes().getAttributeAsInt("examplenumber");
}

totalnumber には、すべての examplenumber 属性値の合計が含まれるようになりました。

これで問題が解決すると思いますか?

于 2014-02-11T10:13:27.570 に答える
1

これは不可能だと思います。また、標準の AnimatedCluster を使用した標準の OpenLayers ではこれが可能だとは思いません。

あなたの最善の推測は、最初にhttps://github.com/acanimal/AnimatedClusterにアクセスして、(標準の openlayers で) 必要なことが可能かどうかを尋ねることです。

彼らがそれが可能であると言うなら、どうやってここに戻ってきて、私はそれをさらに調べることができます. 標準のオープンレイヤーでも不可能だと言うなら、gwt オープンレイヤーでも不可能です。

于 2014-02-10T13:15:39.547 に答える
0

VectorLayer に戦略を割り当てるメソッド:

{
    org.gwtopenmaps.openlayers.client.Style style = new org.gwtopenmaps.openlayers.client.Style();
    style.setJSObject(getOpenLayersStyle());
}

そして、魔法が行われる場所:

private native JSObject getOpenLayersStyle() /*-{
    var style = new $wnd.OpenLayers.Style({
        fontColor: "#FFFFFF",
        fontSize: "12px",
        label: "${countLabel}"
        }, { context: {
            countLabel: function(feature) {
                var countLabel;
                if (feature.cluster) {
                    var result_count = 0;
                    for (var i = 0; i < feature.cluster.length; i++) {
                        result_count += feature.cluster[i].attributes.result_count;
                    }
                    countLabel = result_count.toString();
                } else {
                    countLabel = feature.attributes.result_count.toString();
                }
                feature.attributes.label = countLabel;
                return countLabel;
            }
        }
    });
    return style;
}-*/;
于 2014-02-11T11:34:23.593 に答える