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

leaflet-realtime

v2.2.0

Published

Show realtime updated GeoJSON in Leaflet

Downloads

3,357

Readme

Leaflet Realtime

Build status NPM version Leaflet 1.0 compatible! CDNJS Greenkeeper badge

Put realtime data on a Leaflet map: live tracking GPS units, sensor data or just about anything.

Note: version 2 and up of this plugin is _only compatible with Leaflet 1.0 and later. Use earlier versions of Leaflet Realtime if you need Leaflet 0.7 compatibility.

Example

Checkout the Leaflet Realtime Demo. Basic example:

var map = L.map('map'),
    realtime = L.realtime({
        url: 'https://wanderdrone.appspot.com/',
        crossOrigin: true,
        type: 'json'
    }, {
        interval: 3 * 1000
    }).addTo(map);

realtime.on('update', function() {
    map.fitBounds(realtime.getBounds(), {maxZoom: 3});
});

Usage

Overview

By default, Leaflet Realtime reads and displays GeoJSON from a provided source. A "source" is usually a URL, and data can be fetched using AJAX (XHR), JSONP. This means Leaflet Realtime will poll for data, pulling it from the source. Alternatively, you can write your own source, to provide data in just about any way you want. Leaflet Realtime can also be made work with push data, for example data pushed from the server using socket.io or similar.

To be able to figure out when new features are added, when old features are removed, and which features are just updated, Leaflet Realtime needs to identify each feature uniquely. This is done using a feature id. Usually, this can be done using one of the feature's properties. By default, Leaflet Realtime will try to look for a called property id and use that.

By default, L.Realtime uses a L.GeoJSON layer to display the results. You can basically do anything you can do with L.GeoJSON with L.Realtime - styling, onEachFeature, gettings bounds, etc. as if you were working directly with a normal GeoJSON layer.

L.Realtime can also use other layer types to display the results, for example it can use a MarkerClusterGroup from Leaflet MarkerCluster: pass a LayerGroup (or any class that implements addLayer and removeLayer) to L.Realtime's container option. (This feature was added in version 2.1.0.)

Typical usage involves instantiating L.Realtime with options for style and/or onEachFeature, to customize styling and interaction, as well as adding a listener for the update event, to for example list the features currently visible in the map.

Since version 2.0, Leaflet Realtime uses the Fetch API to request data (AJAX). If you are in the unfortunate situation that you need to support a browser without Fetch, you either need to use a polyfill, or write your own source function to make the AJAX requests.

Push data

If you prefer getting data pushed from the server, in contrast to Leaflet Realtime pulling it with a standard HTTP request, you can feed added and updated GeoJSON data to Leaflet Realtime using the update method. In this scenario, you will also need to remove features by explicit calls to remove.

Since automatic updates do not make sense in a push scenario, you want to create the layer with the option start set to to false.

API

L.Realtime

This is a realtime updated layer that can be added to the map. It extends L.GeoJSON.

Creation

Factory | Description -----------------------|------------------------------------------------------- L.Realtime(<Source> source, <RealtimeOptions> options?) | Instantiates a new realtime layer with the provided source and options

Options

Provides these options, in addition to the options of L.GeoJSON.

Option | Type | Default | Description -----------------------|---------------------|----------------------|--------------------------------------------------------- start | Boolean | true | Should automatic updates be enabled when layer is added on the map and stopped when layer is removed from the map interval | Number | 60000 | Automatic update interval, in milliseconds getFeatureId(<GeoJSON> featureData) | Function | Returns featureData.properties.id | Function used to get an identifier uniquely identify a feature over time updateFeature(<GeoJSON> featureData, <ILayer> oldLayer) | Function | Special | Used to update an existing feature's layer; by default, points (markers) are updated, other layers are discarded and replaced with a new, updated layer. Allows to create more complex transitions, for example, when a feature is updated | container | LayerGroup | L.geoJson() | Specifies the layer instance to display the results in removeMissing | Boolean | false | Should missing features between updates been automatically removed from the layer

Events

Event | Data | Description --------------|----------------|--------------------------------------------------------------- update | UpdateEvent | Fires when the layer's data is updated

Methods

Method | Returns | Description -----------------------|----------------|----------------------------------------------------------------- start() | this | Starts automatic updates stop() | this | Stops automatic updates isRunning() | Boolean | Tells if automatic updates are running update(<GeoJSON> featureData?) | this | Updates the layer's data. If featureData is provided, it is used to add or update data in the layer, otherwise the layer's source is queried for new data asynchronously remove(<GeoJSON> featureData) | this | Removes the provided feature or features from the layer getLayer(<FeatureId> featureId) | ILayer | Retrieves the layer used for a certain feature getFeature(<FeatureId> featureId) | GeoJSON | Retrieves the feature data for the given featureId

Source

The source can be one of:

  • a string with the URL to get data from
  • an options object that is passed to fetch for fetching the data
  • a function in case you need more freedom.

In case you use a function, the function should take two callbacks as arguments: fn(success, error), with the callbacks:

  • a success callback that takes GeoJSON as argument: success(<GeoJSON> features)
  • an error callback that should take an error object and an error message (string) as argument: error(<Object> error, <String> message)

UpdateEvent

An update event is fired when the layer's data is updated from its source. The data included loosely resembles D3's join semantics, to make it easy to handle new features (the enter set), updated features (the update set) and removed features (the exit set).

property | type | description --------------|------------|----------------------------------- features | Object | Complete hash of current features, with feature id as key enter | Object | Features added by this update, with feature id as key update | Object | Existing features updated by this update, with feature id as key exit | Object | Existing features that were removed by this update, with feature id as key