2014-02-10 68 views
0

我使用的是gwt-openlayers-1.0,當前正在學習this示例(動畫集羣策略)。GWT OpenLayers設置集羣點上基礎VectorFeatures的值的總和

在我的項目中,每個VectoreFeature都有一個數字標籤,我想在每個聚類點上顯示底層點標籤值的總和。有沒有辦法做到這一點?

UPD:
根據this文章(「重中之重」戰略的一部分)的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(???); 

回答

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; 
}-*/; 
+0

使用本地方法始終是可行的解決方案。 但gwt-openlayers的目標是你不需要使用本地方法。 無論如何,很高興看到問題解決:) – Knarf

1

我不認爲這是可能的。 我也不認爲在標準的AnimatedCluster標準OpenLayers中這是可能的。

你最好猜的是先去https://github.com/acanimal/AnimatedCluster,然後詢問你是否有可能(在標準的openlayers中)。

如果他們說這是可能的,並說如何回到這裏,我可以進一步看看它。 如果他們認爲它在標準開放層中也是不可能的,那麼它在gwt開放層中也是不可能的。

+0

它在JS根據本文的可能:http://openflights.org/blog/2009/10/21/customized-openlayers-cluster-strategies /(看看「最重要的策略」一節)。如果我只知道如何在gwt-openlayers中以相同的方式附加函數。 – Moonsera

+0

我相信您提供的示例在OpenLayers中使用了標準羣集。 您正在嘗試使用具有不同可能性的第三方插件的動畫羣集。 這是一個具有默認集羣策略的GWT-Openlayers示例:http://demo.gwt-openlayers.org/gwt_ol_showcase/GwtOpenLayersShowcase。html?example = Cluster%20Strategy%20Threshold 再看一點。該動畫羣集擴展了JS中的正常羣集。所以可能在動畫中正常簇中的所有可能都是可能的。如果我有時間,我會研究它。 也許現在嘗試使用正常的集羣策略。 – Knarf

+0

我已經切換到標準集羣,例如我提供了使用哪種策略並不重要。 – Moonsera

1

我使用Popup示例增強了動畫羣集來完成你所要求的操作。 雖然在線上需要一段時間。

變化我提出有:

首先我添加的屬性以每個特徵添加到地圖。此功能只在於,我們要顯示一下羣集功能時的總和的隨機數:

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); 
} 

第二個變化是在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屬性值的總和。

我相信這解決了您的問題?

+0

展櫃現在也進行了更新:http://demo.gwt-openlayers.org/gwt_ol_showcase/GwtOpenLayersShowcase.html?example=Animated%20cluster%20with%20popup – Knarf

+0

我改成了另一種方式,請參閱我的答案。 – Moonsera