web gl renderer plugin for leaflet in typescript
Pronounced leaflet-G.L.-Ify, or leaflet-glify, or L.-G.L.-Ify, or L-glify, or elglify
inspired by http://bl.ocks.org/Sumbera/c6fed35c377a46ff74c3 & need.
- To provide a means of rendering a massive amount of data visually in a way that does not degrade user experience
- Remaining as simple as possible with current fastest libs
- Providing the same sort of user experience one would get using standard html and elements
<script src="dist/glify-browser.js"></script>
<script>
// namespace
L.glify;
</script>Leaflet.glify follows the World Geodetic System (WGS84) standard as defined by the National Geospatial-Intelligence Agency (NGA) and adopted by the GeoJSON specification.
- Default format:
[longitude, latitude](WGS84/GeoJSON standard) - Why this matters: GeoJSON specification requires coordinates in
[lng, lat]order - Reference: WGS84 Standard (NGA), GeoJSON Specification
import glify from 'leaflet.glify';
// Check current coordinate order, "lngFirst" (default)
const currentOrder = glify.getCoordinateOrder();
// Set coordinate order
// WGS84/GeoJSON standard [longitude, latitude]
glify.setCoordinateOrder("lngFirst");
// Legacy format [latitude, longitude]
glify.setCoordinateOrder("latFirst");
// Fluent API
// Same as setCoordinateOrder("lngFirst")
glify.longitudeFirst();
// Same as setCoordinateOrder("latFirst")
glify.latitudeFirst(); import glify from 'leaflet.glify';
// namespace
glifyconst { glify } = require('leaflet.glify');
// namespace
glifyL.glify.points({
map,
data: pointsOrGeoJson,
click: (e, pointOrGeoJsonFeature, xy): boolean | void => {
// do something when a point is clicked
// return false to continue traversing
},
hover: (e, pointOrGeoJsonFeature, xy): boolean | void => {
// do something when a point is hovered
},
});L.glify.lines({
map: map,
data: geojson,
size: 2,
click: (e, feature): boolean | void => {
// do something when a line is clicked
// return false to continue traversing
},
hover: (e, feature): boolean | void => {
// do something when a line is hovered
},
hoverOff: (e, feature): boolean | void => {
// do something when a line is hovered off
},
});L.glify.shapes({
map,
data: geoJson,
click: (e, feature): boolean | void => {
// do something when a shape is clicked
// return false to continue traversing
},
hover: (e, feature): boolean | void => {
// do something when a shape is hovered
}
});L.glify methods
L.glify properties
Adds point data passed in options.data to the Leaflet map instance passed in options.map.
L.glify.Points instance
map{Object}required leaflet mapdata{Object}required geojsonFeatureCollectionobject or an array of[lat: number, lng: number]arraysvertexShaderSource{String|Function}optional glsl vertex shader source, defaults to useL.glify.shader.vertexfragmentShaderSource{String|Function}optional glsl fragment shader source, defaults to useL.glify.shader.fragment.pointclick{Function}optional event handler for clicking a pointhover{Function}optional event handler for hovering a pointcolor{Function|Object|String}optional, default is 'random'- When
coloris aFunctionits arguments are theindex:numberand thepoint:arraythat is being colored, opacity can optionally be included as{ a: number }. The result should be of interfaceIColor, example:{r: number, g: number, b: number, a: number }.
- When
opacity{Number}a value from 0 to 1, default is 0.8. Only used when opacity isn't included on color.className{String}a class name applied to canvas, default is ''size{Number|Function}pixel size of point- When
sizeis aFunctionits arguments areindex:number, and thepoint:arraythat is being sized
- When
sensitivity{Number}exaggerates the size of the clickable area to make it easier to click a pointsensitivityHover{Number}exaggerates the size of the hoverable area to make it easier to hover a pointpreserveDrawingBuffer{Boolean}optional, defaultfalse, perverse draw buffer on webgl context.- CAUTION: May cause performance issue with large data sets.
pane{String}optional, default isoverlayPane. Can be set to a custom pane.
Adds line data passed in options.data to the Leaflet map instance passed in options.map.
L.glify.Lines instance
map{Object}required leaflet mapdata{Object}required geojsonFeatureCollectionobject withgeometry.coordinatesarrays being in a[lat: number, lng: number]formatvertexShaderSource{String|Function}optional glsl vertex shader source, defaults to useL.glify.shader.vertexfragmentShaderSource{String|Function}optional glsl fragment shader source, defaults to useL.glify.shader.fragment.pointclick{Function}optional event handler for clicking a linehover{Function}optional event handler for hovering a linehoverOff{Function}optional event handler for hovering off a linecolor{Function|Object|String}optional, default is 'random'- When
coloris aFunctionits arguments are theindex:numberand thefeature:objectthat is being colored, opacity can optionally be included as{ a: number }. The result should be of interfaceIColor, example:{r: number, g: number, b: number, a: number }.
- When
opacity{Number}a value from 0 to 1, default is 0.5. Only used when opacity isn't included on color.className{String}a class name applied to canvas, default is ''sensitivity{Number}exaggerates the size of the clickable area to make it easier to click a linesensitivityHover{Number}exaggerates the size of the hoverable area to make it easier to hover a linepreserveDrawingBuffer{Boolean}optional, defaultfalse, perverse draw buffer on webgl context.- CAUTION: May cause performance issue with large data sets.
weight{Number|Function}a value in pixels of how thick lines should be drawn- When
weightis aFunctionits arguments are gets theindex:number, and thefeature:objectthat is being drawn - CAUTION: Zoom of more than 18 will turn weight internally to 1 to prevent WebGL precision rendering issues.
- When
pane{String}optional, default isoverlayPane. Can be set to a custom pane.
Adds polygon/multipolygon data passed in options.data to the Leaflet map instance passed in options.map.
L.glify.Shapes instance
map{Object}required leaflet mapdata{Object}required geojsonFeatureCollectionobject withgeometry.coordinatesarrays being in a[lng: number, lat: number]format Note:latandlngare expected in a different order than in.points()and.lines()vertexShaderSource{String|Function}optional glsl vertex shader source, defaults to useL.glify.shader.vertexfragmentShaderSource{String|Function}optional glsl fragment shader source, defaults to useL.glify.shader.fragment.polygonclick{Function}optional event handler for clicking a shapehover{Function}optional event handler for hovering a shapecolor{Function|Object|String}optional, default is 'random'- When
coloris aFunctionits arguments are theindex:numberand thefeature:objectthat is being colored, opacity can optionally be included as{ a: number }. The result should be of interfaceIColor, example:{r: number, g: number, b: number, a: number }.
- When
opacity{Number}a value from 0 to 1, default is 0.5. Only used when opacity isn't included on color.className{String}a class name applied to canvas, default is ''border{Boolean}optional, defaultfalse. When set totrue, a border with an opacity ofsettings.borderOpacityis displayed.borderOpacity{Number}optional, defaultfalse. Border opacity for whensettings.boarderistrue. Default is 1.preserveDrawingBuffer{Boolean}optional, default1, adjusts the border opacity separate fromopacity.- CAUTION: May cause performance issue with large data sets.
pane{String}optional, default isoverlayPane. Can be set to a custom pane.
Sets the expecetd order of arrays in the coordinates array of GeoJSON passed to options.data to be [lng, lat]
The updated L.glify instance it was called on
Sets the expecetd order of arrays in the coordinates array of GeoJSON passed to options.data to be [lat, lng]
The updated L.glify instance it was called on
All of the L.glify.Points instances
All of the L.glify.Lines instances
All of the L.glify.Shapes instances
You can build the library by running yarn run build or npm run build
Use yarn serve or npm run serve
Use yarn test or npm run test
L.glify instances can be updated using the update(data, index) method.
data{Object}Lines and Shapes require a single GeoJSON feature. Points require the same data structure as the original object and therefore also accept an array of coordinates.index{number}An integer indicating the index of the element to be updated.
An object or some elements of an object are removed using the remove(index) method.
-
index{number|Array}optional - An integer or an array of integers specifying the indices of the elements to be removed. -
index{number|Array}optional - An integer or an array of integers specifying the indices of the elements to be removed. Ifindexis not defined, the entire object is removed.
let newPoints = L.glify.points({
map: leafletMap,
data: geojsonFeatureCollection,
size: 30
});
// Update the third feature
newPoints.update({
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
34.072204277521394
-118.44255208969116
]
}
}]
}, 2);
// Now remove it
newPoints.remove(2);This project exists thanks to all the people who contribute. [Contribute].
Thank you to all our backers! 🙏 [Become a backer]
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]