Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for performant hover and overlay rendering #40

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

henryptung
Copy link
Contributor

Modify visibleLayers to allow for mapping.

visibleLayers can now be specified as a { [string]: string } map. This allows specification of multiple, differently-styled render passes based on the same layer data. Is particularly useful for rendering overlay-style interactive elements (like hover).
Empty visibleLayers array now means no layers, instead of all layers shown. Slightly API-breaking, though this seems like the more consistent value (probably better to treat absent/null as the special "show all" value, rather than empty array, which logically seems more like "show none".
Also exposed MVTFeature.redraw method, to allow individual features to be restyled rapidly during hover interaction without redrawing the whole layer (or using a double .toggle() hack).

henryptung and others added 3 commits August 5, 2015 21:21
- visibleLayers can now be specified as a { [string]: string } map.
  This allows specification of multiple, differently-styled render
  passes based on the same layer data.  Is particularly useful for
  rendering overlay-style interactive elements (like hover).

- Empty visibleLayers array now means no layers, instead of all layers
  shown.  Slightly API-breaking, though this seems like the more
  consistent value (probably better to treat absent/null as
  the special "show all" value, rather than empty array, which
  logically seems more like "show none".
This allows individual MVTFeatures to be restyled
by setting the style on them, then redrawing just
the tiles containing the feature (rather than mutating
one piece of the style and redrawing the whole layer).
This allows for fast hover interaction.
Brought in rbush to accelerate featureAt at high feature scale.
This makes it a viable replacement for UtfGrid
in hover interaction. Didn't actually implement hover styling here,
since I opted to provide custom styling using a
combination of mouseover/move/out listeners on the layer
and featureAt, as well as the overlay-drawing code from
before.
@henryptung henryptung changed the title Add multiple draw passes for hover Add support for performant hover and overlay rendering Sep 16, 2015
@rgwozdz
Copy link

rgwozdz commented Dec 18, 2015

Hello @henryptung - we're considering whether we want to merge the non-backward compatible change to the visibleLayers property. Hope to come to consensus in the next few weeks.

@@ -87,7 +87,7 @@ function ajaxCallback(self, response) {
}

self._setStyle(self.mvtLayer.style);
redrawTiles(self);
this.redraw();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this context, this.redraw is undefined; it should use self.redraw instead

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants