npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@nazka/map-gl-js-spiderfy

v1.2.1

Published

Spiderfy for Maplibre and Mapbox

Downloads

865

Readme

map-gl-js-spiderfy · npm version PRs Welcome

Spiderfy plugin for maplibre-gl and mapbox-gl. This plugin creates the spiderfication in the canvas itself instead of on top of it. This allows for more advanced interactions with the map and its content. This plugin builds further upon the cluster functionality of maplibre and mapbox.

This opensource project is maintained by nazka mapps, we gladly welcome any contributions!

We try to stand out by:

  • compatibility with both mapbox-gl and maplibre-gl
  • rendering in the canvas (with 3D rendering support)
  • a lot of customizable properties and options (see advanced demo)

A nice extra, since the spiderfication is part of the canvas, generating screenshots of it is really easy

screenshot (15)

Demo examples

Maplibre ^4.0.0

Mapbox and older Maplibre versions

Usage

Install the npm package:

npm install @nazka/map-gl-js-spiderfy

Simple setup:

import Spiderfy from '@nazka/map-gl-js-spiderfy';

...

// create a new spiderfy object
const spiderfy = new Spiderfy(map, {
  onLeafClick: f => console.log(f),
  minZoomLevel: 12,
  zoomIncrement: 2,
});

// enable spiderfy on a layer
// IMPORTANT: the layer must have a cluster source
spiderfy.applyTo('markers');

Please refer to the demo examples first if you're having issues.

Docs

New Spiderfy instance

new Spiderfy(map, options)

Options

  • map - reference to a maplibre-gl or mapbox-gl instance [object]

  • options

    • onLeafClick - allows to put an action on the clicked leaf [function (feature, event)]

    • onLeafHover - allows to put an action on the hovered leaf [function (feature, event)]

    • minZoomLevel - allows spiderfication starting from this zoom level [number] [default: 0]

    • zoomIncrement - if minZoomLevel is not reached on cluster click, the map will zoom by this amount instead [number] [default: 2]

    • closeOnLeafClick - remove the spiderfication on leaf click [boolean] [default: true]

    • circleSpiralSwitchover - number of leaves required to switch from circle to spiral spiderfication [number] [default: 10]

    • circleOptions - options that are specific to circle spiderfications [object]

      • leavesSeparation - distance between the spiderfied leaves in pixels [number] [default: 50]

      • leavesOffset - moves the leaves relative to the parent cluster in pixels [array] [default: [0, 0]]

    • spiralOptions - options that are specific to spiral spiderfications, these interact with each other and will probably all require some tweaking when changing one of them [object]

      • legLengthStart - the starting length of the spider leg in pixels [number] [default: 25]

      • legLengthFactor - the growth factor of the next leg in pixels [number] [default: 2.2]

      • leavesSeparation - distance between the spiderfied leaves in pixels [number] [default: 30]

      • leavesOffset - moves the leaves relative to the parent cluster in pixels [array] [default: [0, 0]]

    • spiderLegsAreHidden - don't render the spider legs [boolean] [default: false]

    • spiderLegsWidth - the width of the spider legs in pixel [number] [default: 1]

    • spiderLegsColor - the color of the spider legs [string] [default: 1]

    • spiderLeavesLayout - your own style layout attributes ('icon-offset' can't be used) [object] [default: cluster layout]

    • spiderLeavesPaint - your own style paint attributes [object] [default: cluster paint]

    • maxLeaves - limits the amount of leaves that can be in a spiderfication [number] [default: 255]

    • renderMethod - set to "3D" for this experimental render feature [string] [default: 'flat']

Functions

  • applyTo(layerId) apply the spiderfier on a layer [function]

    • layerId maplibre/mapbox layer id [string]
  • unspiderfyAll() clears any active spiderfication from the map [function]

Contributing

If an issue has a help wanted tag this means you can pick it up, just let us know.

You will have to create a fork of this project with your own branch and work on there. Once that's done you can create a pull request on this repo. One of the maintainers will have a look at it and give the necessary feedback/questions or merge it into this project.

Take a look at this repo if you haven't made a contribution to a project on github yet.

License

This package is published under the BSD-3-Clause License. Copyright (c) 2022, nazka mapps