# Leaflet.D3SvgOverlay **Repository Path**: mirrors_SuperMap/Leaflet.D3SvgOverlay ## Basic Information - **Project Name**: Leaflet.D3SvgOverlay - **Description**: Leaflet Plugin: D3 SVG Overlay - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-18 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Leaflet.D3SvgOverlay =============== An overlay class for [Leaflet](http://leafletjs.com), a JS library for interactive maps. Allows drawing overlay using SVG with the help of [D3](http://d3js.org), a JavaScript library for manipulating documents based on data. ## Features * Easy SVG-drawing with D3 * No limitations to polylines, circles or geoJSON. Draw whatever you want with SVG * No need to reproject your geometries on zoom, this is done using SVG scaling * Zoom animation where Leaflet supports it ## Basic usage Include the dependency libraries: Include the D3SvgOverlay library: Create a map: var map = L.map(...); Create an overlay: var d3Overlay = L.supermap.d3Layer(function(selection, projection){ var updateSelection = selection.selectAll('circle').data(dataset); updateSelection.enter() .append('circle') ... .attr("cx", function(d) { return projection.latLngToLayerPoint(d.latLng).x }) .attr("cy", function(d) { return projection.latLngToLayerPoint(d.latLng).y }); }); Add it to the map: d3Overlay.addTo(map); Note: within the drawing callback function you can and should use the normal [D3 workflow](https://github.com/mbostock/d3/wiki/Selections) with *update*, *.enter()* and *.exit()* selections. ## API *Factory method* L.supermap.d3Layer( drawCallback, options?) * `drawCallback` - callback to draw/update overlay contents, it's called with arguments: * `options` - overlay options object: *Drawing callback function* drawCallback(selection, projection) * `selection` - D3 selection of a parent element for drawing. Put your SVG elements bound to data here * `projection` - projection object. Contains methods to work with layers coordinate system and scaling *Overlay options object* available fields: * `zoomHide` - (bool) hide the layer while zooming. Default is *false*. Useful when overlay contains a lot of elements and animation is laggy. * `zoomDraw` - (bool) whether to trigger drawCallback on after zooming is done. Default is *true*. Useful e.g. when you want to adjust size or width of the elements depending on zoom. *Projection object* available methods/fields: * `latLngToLayerPoint(latLng, zoom?)` - (function) returns `L.Point` projected from `L.LatLng` in the coordinate system of the overlay. * `layerPointToLatLng(point, zoom?)` - (function) returns `L.LatLng` projected back from `L.Point` into the original CRS. * `unitsPerMeter` - (float) this is a number of the overlay coordinate system units in 1 meter. Useful to get dimensions in meters. * `scale` - scale of current zoom compared to the zoom level of overlay coordinate system. Useful if you want to make your elements of a size independent of zoom. Just divide the size by the scale. * `map` - reference to the `L.Map` object, useful to get map state (zoom, viewport bounds, etc), especially when having multiple maps in the page. * `layer` - reference to the `L.supermap.d3Layer` object, useful for extending behavior of the overlay. * `pathFromGeojson` - a [paths](https://github.com/d3/d3-geo/blob/master/README.md#paths) path generator object that can generate _SVG Path_ projected into the overlay's coordinate system from any [GeoJSON](http://geojson.org/) ## License This code is provided under the MIT License (MIT).