[OpenLayers-Dev] Lost scope in tileUrlFunction when extending ol.source.VectorTile (MVT)

Roman Zoller roman.zoller at camptocamp.com
Thu Oct 12 05:48:05 PDT 2017


As far as I understand, the ol.source.VectorTile class wasn't specifically
designed to have tileUrlFunction as a function that can be overriden and
that will be called with a specific this context.

I think the general idea is that you can just pass any function as
options.tileUrlFunction, and it just happened to be called with a this
context of the class before version 4.2.0, but I guess this was never
really an intended feature.

For your specific issue, I think you could rename the function in your
class to avoid confusion, e.g.

ol.source.GWCVT.prototype.defaultTileUrlFunction =
    function(tileCoord, pixelRatio, projection) {
  // ...
};

and then pass it as options.tileUrlFunction to the super class in your
constructor, with correctly bound this:

ol.source.GWCVT = function(options) {
  var tileUrlFunction = options.tileUrlFunction ||
this.defaultTileUrlFunction.bind(this);

  ol.source.VectorTile.call(this, {
    tileUrlFunction: tileUrlFunction,
    ...
  });
};

Hope that helps!

Cheers,

Roman

On Thu, Oct 12, 2017 at 2:33 PM, Christian Mayer <ml-cm at meggsimum.de> wrote:

> Hi again,
>
> here is some more information in addition to my previous mail:
>
> The problem occurs for VectorTiles in GeoJSON format as well. So there
> must be a more general problem with extending the
> ol.source.VectorTile (or the way I do it).
> The change / problem seems to be introduced with Version 4.2.0. With
> version 4.1.1 everything works as expected.
>
> Cheers
> Chris
>
>
> On 12.10.2017 13:45, Christian Mayer wrote:
>
> Hi all,
>
> I extended the class ol.source.VectorTile in order to load VectorTiles in
> different formats (GeoJSON and MVT) from a local GWC cache. While upgrading
> from OpenLayers v3.20 to OpenLayers v4.x it seems that for MVT the scope in
> the "tileUrlFunction" gets lost. It seems to be "window". For GeoJSON-based
> VectorTiles everything is still running fine.
>
> Below you find the crutial parts of my class:
>
> ol.inherits(ol.source.GWCVT, ol.source.VectorTile);
>
> ol.source.GWCVT.prototype.tileUrlFunction =
>     function(tileCoord, pixelRatio, projection) {
>
> // here 'this' becomes 'window' in the second call
>
> // assembling the URL
> // ...
>
> }
>
> ol.source.GWCVT.prototype.setTileUrlFunction = function(tileUrlFunction) {
>
>   ol.source.VectorTile.prototype.setTileUrlFunction.call(this,
> tileUrlFunction);
> };
>
> Thanks for any hint!
> Cheers
> Chris
>
> _______________________________________________
> Dev mailing listDev at lists.osgeo.orghttps://lists.osgeo.org/mailman/listinfo/openlayers-dev
>
>
>
> _______________________________________________
> Dev mailing list
> Dev at lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/openlayers-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/openlayers-dev/attachments/20171012/f89a0154/attachment.html>


More information about the Dev mailing list