cross-links: moved to extra layer

This commit is contained in:
McBen 2014-06-10 19:12:16 +02:00
parent c7c5df7134
commit 62e1ee0cd6

View File

@ -18,13 +18,8 @@
// PLUGIN START //////////////////////////////////////////////////////// // PLUGIN START ////////////////////////////////////////////////////////
// use own namespace for plugin
window.plugin.crossLinks = function() {}; window.plugin.crossLinks = function() {};
window.plugin.crossLinks.STYLE_LINECOLLISION = {color: '#f22', weight: 4};
window.plugin.crossLinks.STYLE_INSIDEPOLY = {color: '#ff2', weight: 4};
// Great Circle Arc Intersection // Great Circle Arc Intersection
// http://geospatialmethods.org/spheres/GCAIntersect.html // http://geospatialmethods.org/spheres/GCAIntersect.html
function intersect(a, b) { function intersect(a, b) {
@ -164,6 +159,8 @@ window.plugin.crossLinks.testPolygons = function (polygons, link) {
} }
window.plugin.crossLinks.onLinkAdded = function (data) { window.plugin.crossLinks.onLinkAdded = function (data) {
if (window.plugin.crossLinks.disabled) return;
window.plugin.crossLinks.linkLayer.bringToFront(); // FIXME: workaround to keep it on above the link-layer
var link = data.link; var link = data.link;
@ -172,7 +169,7 @@ window.plugin.crossLinks.onLinkAdded = function (data) {
latlngs = layer.getLatLngs(); latlngs = layer.getLatLngs();
latlngs.push(latlngs[0]); latlngs.push(latlngs[0]);
if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) { if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) {
link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); plugin.crossLinks.showLink(link.getLatLngs());
} }
// TODO: rework inside-polygons // TODO: rework inside-polygons
/* /*
@ -184,31 +181,32 @@ window.plugin.crossLinks.onLinkAdded = function (data) {
} else if (layer instanceof L.GeodesicPolyline) { } else if (layer instanceof L.GeodesicPolyline) {
if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) { if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) {
link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); plugin.crossLinks.showLink(link.getLatLngs());
} }
} }
}); });
} }
window.plugin.crossLinks.checkAllLinks = function() { window.plugin.crossLinks.checkAllLinks = function() {
console.debug("Cross-Links: checking links"); console.debug("Cross-Links: checking links");
if (window.plugin.crossLinks.disabled) return;
// check all links plugin.crossLinks.linkLayer.clearLayers();
$.each(window.links, function(guid, link) {
link.setStyle ({color: COLORS[link.options.team], weight: 2}); // check all links
$.each(window.links, function(guid, link) {
window.plugin.drawTools.drawnItems.eachLayer( function(layer) { window.plugin.drawTools.drawnItems.eachLayer( function(layer) {
if (layer instanceof L.GeodesicPolyline) { if (layer instanceof L.GeodesicPolyline) {
if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) { if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) {
link.setStyle(window.plugin.crossLinks.STYLE_LINECOLLISION); plugin.crossLinks.showLink(link.getLatLngs());
return false; return false;
} }
} else if (layer instanceof L.GeodesicPolygon) { } else if (layer instanceof L.GeodesicPolygon) {
latlngs = layer.getLatLngs(); latlngs = layer.getLatLngs();
latlngs.push(latlngs[0]); latlngs.push(latlngs[0]);
if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) { if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) {
link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION); plugin.crossLinks.showLink(link.getLatLngs());
} }
// TODO: rework inside-polygons // TODO: rework inside-polygons
} }
@ -216,6 +214,17 @@ window.plugin.crossLinks.checkAllLinks = function() {
}); });
} }
window.plugin.crossLinks.showLink = function(latlngs) {
var poly = L.geodesicPolyline(latlngs, {
color: '#f11',
opacity: 0.7,
weight: 4,
clickable: false,
});
poly.addTo(plugin.crossLinks.linkLayer);
};
window.plugin.crossLinks.drawTools_save = function() { window.plugin.crossLinks.drawTools_save = function() {
window.plugin.crossLinks.ori_drawTools_save(); window.plugin.crossLinks.ori_drawTools_save();
@ -228,6 +237,25 @@ window.plugin.crossLinks.drawTools_load = function() {
} }
window.plugin.crossLinks.createLayer = function() {
window.plugin.crossLinks.linkLayer = new L.FeatureGroup(); //LayerGroup(); FIXME: need to be a FeatureGroup to bring it to front
window.addLayerGroup('Cross Links', window.plugin.crossLinks.linkLayer, true);
window.plugin.crossLinks.linkLayer.bringToFront();
//hide the draw tools when the 'drawn items' layer is off, show it when on
map.on('layeradd', function(obj) {
if(obj.layer === window.plugin.crossLinks.linkLayer) {
window.plugin.crossLinks.disabled = undefined;
window.plugin.crossLinks.checkAllLinks();
}
});
map.on('layerremove', function(obj) {
if(obj.layer === window.plugin.crossLinks.linkLayer) {
window.plugin.crossLinks.disabled = true;
}
});
}
var setup = function() { var setup = function() {
console.debug("Cross-Links: init"); console.debug("Cross-Links: init");
if (window.plugin.drawTools === undefined) { if (window.plugin.drawTools === undefined) {
@ -235,6 +263,8 @@ var setup = function() {
return; return;
} }
window.plugin.crossLinks.createLayer();
// hook 'drawTools' // hook 'drawTools'
window.plugin.crossLinks.ori_drawTools_save = window.plugin.drawTools.save; window.plugin.crossLinks.ori_drawTools_save = window.plugin.drawTools.save;
window.plugin.drawTools.save = window.plugin.crossLinks.drawTools_save; window.plugin.drawTools.save = window.plugin.crossLinks.drawTools_save;