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 ////////////////////////////////////////////////////////
// use own namespace for plugin
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
// http://geospatialmethods.org/spheres/GCAIntersect.html
function intersect(a, b) {
@ -164,6 +159,8 @@ window.plugin.crossLinks.testPolygons = function (polygons, link) {
}
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;
@ -172,7 +169,7 @@ window.plugin.crossLinks.onLinkAdded = function (data) {
latlngs = layer.getLatLngs();
latlngs.push(latlngs[0]);
if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) {
link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION);
plugin.crossLinks.showLink(link.getLatLngs());
}
// TODO: rework inside-polygons
/*
@ -184,31 +181,32 @@ window.plugin.crossLinks.onLinkAdded = function (data) {
} else if (layer instanceof L.GeodesicPolyline) {
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() {
console.debug("Cross-Links: checking links");
console.debug("Cross-Links: checking links");
if (window.plugin.crossLinks.disabled) return;
// check all links
$.each(window.links, function(guid, link) {
plugin.crossLinks.linkLayer.clearLayers();
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) {
if (layer instanceof L.GeodesicPolyline) {
if (window.plugin.crossLinks.testPolyLine(layer.getLatLngs(), link.getLatLngs())) {
link.setStyle(window.plugin.crossLinks.STYLE_LINECOLLISION);
plugin.crossLinks.showLink(link.getLatLngs());
return false;
}
} else if (layer instanceof L.GeodesicPolygon) {
latlngs = layer.getLatLngs();
latlngs.push(latlngs[0]);
if (window.plugin.crossLinks.testPolyLine(latlngs, link.getLatLngs())) {
link.setStyle (window.plugin.crossLinks.STYLE_LINECOLLISION);
plugin.crossLinks.showLink(link.getLatLngs());
}
// 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.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() {
console.debug("Cross-Links: init");
if (window.plugin.drawTools === undefined) {
@ -235,6 +263,8 @@ var setup = function() {
return;
}
window.plugin.crossLinks.createLayer();
// hook 'drawTools'
window.plugin.crossLinks.ori_drawTools_save = window.plugin.drawTools.save;
window.plugin.drawTools.save = window.plugin.crossLinks.drawTools_save;