cross-links: moved to extra layer
This commit is contained in:
parent
c7c5df7134
commit
62e1ee0cd6
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user