Openlayers 3: add text label to feature
Asked Answered
T

2

11

I have the current set up here: fully functional fiddle example and whilst I have managed to zoom to each polygon feature I would also like to display a centralised text label on each... the field_title variable found within the get_fields method. I have no idea how to do this and all my googling has come up with this article: http://openlayers.org/en/v3.3.0/examples/vector-labels.html which I find totally confusing as I'm a little new to OL!

Tycoon answered 17/8, 2016 at 21:31 Comment(2)
Could you move the animating part to another question? It can helps in this initial confusion.Robers
@JonatasWalker have done. Thanks.Tycoon
R
20

To add a text to ol.Feature you will store the description in the feature and set a style that is a style function (that will get the description from the feature and show it):

field_polygon.set('description', field_title);
field_polygon.setStyle(styleFunction);

function styleFunction() {
  return [
    new ol.style.Style({
        fill: new ol.style.Fill({
        color: 'rgba(255,255,255,0.4)'
      }),
      stroke: new ol.style.Stroke({
        color: '#3399CC',
        width: 1.25
      }),
      text: new ol.style.Text({
        font: '12px Calibri,sans-serif',
        fill: new ol.style.Fill({ color: '#000' }),
        stroke: new ol.style.Stroke({
          color: '#fff', width: 2
        }),
        // get the text from the feature - `this` is ol.Feature
        // and show only under certain resolution
        text: map.getView().getZoom() > 12 ? this.get('description') : ''
      })
    })
  ];
}

Your fiddle.

Robers answered 18/8, 2016 at 10:17 Comment(4)
This is brilliant! Thank you! How would I only show the text above a certain zoom level?Tycoon
See updated answer. map.getView().getZoom() > 12 ? this.get('description') : ''Robers
are you sure this works? I'm getting Window on this instead of a ol.FeatureJazzy
I got no a reference to map, so better I use a different signature for styleFunction : const styleFunction = (myParams) => (feature, resulution) => . . . then I compare the resolutionvariable instead of getZoom() to change the text contentBoarhound
P
3

Since I am new here and are not allowed to comment, I put my comment as a new answer to the question of @andre_ss6. I also get Window on this. What works for me is passing in the feature object as the function's first parameter:

function styleFunction(feature) {

and then use that parameter instead of this:

text: feature.get('description')
Purple answered 15/10, 2020 at 19:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.