如何查找在功能上预先设置的样式文本 - OL3

时间:2015-12-14 15:46:44

标签: openlayers-3

使用OL3,我动态地在文本上设置文本:

var myLayer = new ol.layer.Vector({
            source: mySource,
            style: function (feature, resolution) {
                var style = new ol.style.Style({
                    text: new ol.style.Text({
                        text: setText(feature)
                    })
                });

                return [style];
            }
        });

我想稍后阅读文本中存储的内容:

text: setText(feature)

我正在尝试检索单击事件上的文本,但不确定如何在要素样式下访问该属性(要素是包含所单击要素的事件中的变量):

// Get current display text
var currentFeatureStyle = feature.getStyle();

但是当我这样做时,我得到一个null currentFeatureStyle。

还尝试循环浏览功能:

for (var fid in feature)
{
//what to look for to extract the feature text?

但不确定要提取要素文本的内容。任何从功能中取回功能文本的帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

如果有人能够提出更正确的答案,请务必在下面发布。我创建了一个"解决方法"因为我无法从功能中检索文本。解决方法涉及以下内容:

  1. 在方法内部最初设置文本,添加以下内容:

    function setText(feature)
    {
    
        // First do your normal stuff (set the text of the feature)
        var output = "myFeatureText";
    
        // Here is the workaround step 1:
        // Create a property and set it to the text
        feature.displayText = output;
    
        // Return back value for the setting of the style text
        return output;
    }
    
  2. 现在,文本也保存在名为displayText的属性中。注意:displayText是一个组合属性,它在openlayers中不存在。

    1. 第2步是检索您在步骤1中创建的属性以获取显示文本。在这个例子中,我们从singleclick中检索该功能,但它可以来自您正在使用该功能的任何其他地方:

      map.on('singleclick', function (evt) {
      
      var feature = map.forEachFeatureAtPixel(evt.pixel,
                      function (feature, layer) {
                          return feature;
                      });
      
      // Here is the workaround step 2:
      
      // Get "display text" custom field for this feature
      
      var displayText = feature.displayText;
      

    2. 这就是它的全部内容。必须有一个正确的"从功能的样式中检索文本的方法,但我不知道它。如果有人知道如何发布你的答案。