leaflet-schematic v1.1.0
Leaflet schematic

This is a set of tools to display and work with non-cartographic large high-detailed SVG schematics or blueprints. SVG is a perfect format for the task - it's vector, relatively compact, has all the means to work with templates and symbols, so it can really be a great representation and metadata container at the same time.
Usage
var xhr = require('xhr');
var SVGOverlay = require('leaflet-schematic');
var map = L.map('map', { crs: L.CRS.Simple });
L.svgOverlay('/path/to/svg.svg', {
load: function(url, callback) {
// your/your library xhr implementation
xhr({
uri: url,
headers: {
"Content-Type": "image/svg+xml"
}
}, function (err, resp, svg) {
callback(err, svg);
});
}
}).addTo(map);
Problem
The problem is that if you want to work with the SVG as with image overlay, several technical limitations and performance issues strike in:
- you cannot work on larger scales with the whole canvas because of the dimension restrictions of browsers
- you have to scale the drawing initially to fit the viewport on the certain zoom level
- IE (as always) - I wouldn't even call that "SVG support"
<use>
elements have a special freaky non-compliant API which is also broken- css-transforms - unsupported
translate() + scale()
transform on<g>
-doesn't work, use matrix- horrible performance - the more SVG nodes you have the slower it is
Approach
- Use leaflet viewportized layer container to render part of the
SVG
with padding - scale
SVG
to fit the viewport and zoom levels - pack
SVG
contents into moving<g>
- for IE - hardcore hacking:
- render
SVG
> base64 ><canvas>
- replace
SVG
with this canvas on drag and zoom - also keep a hidden PNG rendered to overcome IE's performance drop on image scaling, somehow it works like a directive to switch the faulty smoothing off
- render
Know issues
- SVGs without correctly provided
viewBox
work really badly and I cannot yet figure out why. I'm trying to calculate viewbox from the contents, but it still looks broken in rendered canvas
License
MIT
5 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago