forked from Snck3rs/contao-leaflet-libraries
Add omnivore plugin.
This commit is contained in:
255
assets/leaflet-omnivore/index.js
Normal file
255
assets/leaflet-omnivore/index.js
Normal file
@@ -0,0 +1,255 @@
|
||||
var xhr = require('corslite'),
|
||||
csv2geojson = require('csv2geojson'),
|
||||
wellknown = require('wellknown'),
|
||||
polyline = require('polyline'),
|
||||
topojson = require('topojson/topojson.js'),
|
||||
toGeoJSON = require('togeojson');
|
||||
|
||||
module.exports.polyline = polylineLoad;
|
||||
module.exports.polyline.parse = polylineParse;
|
||||
|
||||
module.exports.geojson = geojsonLoad;
|
||||
|
||||
module.exports.topojson = topojsonLoad;
|
||||
module.exports.topojson.parse = topojsonParse;
|
||||
|
||||
module.exports.csv = csvLoad;
|
||||
module.exports.csv.parse = csvParse;
|
||||
|
||||
module.exports.gpx = gpxLoad;
|
||||
module.exports.gpx.parse = gpxParse;
|
||||
|
||||
module.exports.kml = kmlLoad;
|
||||
module.exports.kml.parse = kmlParse;
|
||||
|
||||
module.exports.wkt = wktLoad;
|
||||
module.exports.wkt.parse = wktParse;
|
||||
|
||||
function addData(l, d) {
|
||||
if ('addData' in l) l.addData(d);
|
||||
if ('setGeoJSON' in l) l.setGeoJSON(d);
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a [GeoJSON](http://geojson.org/) document into a layer and return the layer.
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function geojsonLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, function(err, response) {
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
addData(layer, JSON.parse(response.responseText));
|
||||
layer.fire('ready');
|
||||
});
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a [TopoJSON](https://github.com/mbostock/topojson) document into a layer and return the layer.
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function topojsonLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
topojsonParse(response.responseText, options, layer);
|
||||
layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a CSV document into a layer and return the layer.
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function csvLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
var error;
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
function avoidReady() {
|
||||
error = true;
|
||||
}
|
||||
layer.on('error', avoidReady);
|
||||
csvParse(response.responseText, options, layer);
|
||||
layer.off('error', avoidReady);
|
||||
if (!error) layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a GPX document into a layer and return the layer.
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function gpxLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
var error;
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
function avoidReady() {
|
||||
error = true;
|
||||
}
|
||||
layer.on('error', avoidReady);
|
||||
gpxParse(response.responseXML || response.responseText, options, layer);
|
||||
layer.off('error', avoidReady);
|
||||
if (!error) layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a [KML](https://developers.google.com/kml/documentation/) document into a layer and return the layer.
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function kmlLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
var error;
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
function avoidReady() {
|
||||
error = true;
|
||||
}
|
||||
layer.on('error', avoidReady);
|
||||
kmlParse(response.responseXML || response.responseText, options, layer);
|
||||
layer.off('error', avoidReady);
|
||||
if (!error) layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a WKT (Well Known Text) string into a layer and return the layer
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function wktLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
wktParse(response.responseText, options, layer);
|
||||
layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a polyline string into a layer and return the layer
|
||||
*
|
||||
* @param {string} url
|
||||
* @param {object} options
|
||||
* @param {object} customLayer
|
||||
* @returns {object}
|
||||
*/
|
||||
function polylineLoad(url, options, customLayer) {
|
||||
var layer = customLayer || L.geoJson();
|
||||
xhr(url, onload);
|
||||
function onload(err, response) {
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
polylineParse(response.responseText, options, layer);
|
||||
layer.fire('ready');
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
function topojsonParse(data, options, layer) {
|
||||
var o = typeof data === 'string' ?
|
||||
JSON.parse(data) : data;
|
||||
layer = layer || L.geoJson();
|
||||
for (var i in o.objects) {
|
||||
var ft = topojson.feature(o, o.objects[i]);
|
||||
if (ft.features) addData(layer, ft.features);
|
||||
else addData(layer, ft);
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
function csvParse(csv, options, layer) {
|
||||
layer = layer || L.geoJson();
|
||||
options = options || {};
|
||||
csv2geojson.csv2geojson(csv, options, onparse);
|
||||
function onparse(err, geojson) {
|
||||
if (err) return layer.fire('error', { error: err });
|
||||
addData(layer, geojson);
|
||||
}
|
||||
return layer;
|
||||
}
|
||||
|
||||
function gpxParse(gpx, options, layer) {
|
||||
var xml = parseXML(gpx);
|
||||
if (!xml) return layer.fire('error', {
|
||||
error: 'Could not parse GPX'
|
||||
});
|
||||
layer = layer || L.geoJson();
|
||||
var geojson = toGeoJSON.gpx(xml);
|
||||
addData(layer, geojson);
|
||||
return layer;
|
||||
}
|
||||
|
||||
|
||||
function kmlParse(gpx, options, layer) {
|
||||
var xml = parseXML(gpx);
|
||||
if (!xml) return layer.fire('error', {
|
||||
error: 'Could not parse KML'
|
||||
});
|
||||
layer = layer || L.geoJson();
|
||||
var geojson = toGeoJSON.kml(xml);
|
||||
addData(layer, geojson);
|
||||
return layer;
|
||||
}
|
||||
|
||||
function polylineParse(txt, options, layer) {
|
||||
layer = layer || L.geoJson();
|
||||
options = options || {};
|
||||
var coords = polyline.decode(txt, options.precision);
|
||||
var geojson = { type: 'LineString', coordinates: [] };
|
||||
for (var i = 0; i < coords.length; i++) {
|
||||
// polyline returns coords in lat, lng order, so flip for geojson
|
||||
geojson.coordinates[i] = [coords[i][1], coords[i][0]];
|
||||
}
|
||||
addData(layer, geojson);
|
||||
return layer;
|
||||
}
|
||||
|
||||
function wktParse(wkt, options, layer) {
|
||||
layer = layer || L.geoJson();
|
||||
var geojson = wellknown(wkt);
|
||||
addData(layer, geojson);
|
||||
return layer;
|
||||
}
|
||||
|
||||
function parseXML(str) {
|
||||
if (typeof str === 'string') {
|
||||
return (new DOMParser()).parseFromString(str, 'text/xml');
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user