cross-links: process collision links only once (and delete if needed)
This commit is contained in:
parent
e2135acf8b
commit
63a0aa69b5
@ -167,6 +167,7 @@ window.plugin.crossLinks.checkAllLinks = function() {
|
|||||||
|
|
||||||
console.debug("Cross-Links: checking all links");
|
console.debug("Cross-Links: checking all links");
|
||||||
plugin.crossLinks.linkLayer.clearLayers();
|
plugin.crossLinks.linkLayer.clearLayers();
|
||||||
|
plugin.crossLinks.linkLayerGuids = {};
|
||||||
|
|
||||||
$.each(window.links, function(guid, link) {
|
$.each(window.links, function(guid, link) {
|
||||||
plugin.crossLinks.testLink(link);
|
plugin.crossLinks.testLink(link);
|
||||||
@ -174,30 +175,38 @@ window.plugin.crossLinks.checkAllLinks = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
window.plugin.crossLinks.testLink = function (link) {
|
window.plugin.crossLinks.testLink = function (link) {
|
||||||
window.plugin.drawTools.drawnItems.eachLayer( function(layer) {
|
if (plugin.crossLinks.linkLayerGuids[link.options.guid]) return;
|
||||||
|
|
||||||
|
for (var i in plugin.drawTools.drawnItems._layers) { // leaflet don't support breaking out of the loop
|
||||||
|
var layer = plugin.drawTools.drawnItems._layers[i];
|
||||||
if (layer instanceof L.GeodesicPolygon) {
|
if (layer instanceof L.GeodesicPolygon) {
|
||||||
if (window.plugin.crossLinks.testPolyLine(layer, link,true)) {
|
if (plugin.crossLinks.testPolyLine(layer, link,true)) {
|
||||||
plugin.crossLinks.showLink(link);
|
plugin.crossLinks.showLink(link);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} else if (layer instanceof L.GeodesicPolyline) {
|
} else if (layer instanceof L.GeodesicPolyline) {
|
||||||
if (window.plugin.crossLinks.testPolyLine(layer, link)) {
|
if (plugin.crossLinks.testPolyLine(layer, link)) {
|
||||||
plugin.crossLinks.showLink(link);
|
plugin.crossLinks.showLink(link);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
window.plugin.crossLinks.showLink = function(link) {
|
window.plugin.crossLinks.showLink = function(link) {
|
||||||
|
|
||||||
var poly = L.geodesicPolyline(link.getLatLngs(), {
|
var poly = L.geodesicPolyline(link.getLatLngs(), {
|
||||||
color: '#f11',
|
color: '#f11',
|
||||||
opacity: 0.7,
|
opacity: 0.7,
|
||||||
weight: 4,
|
weight: 4,
|
||||||
clickable: false,
|
clickable: false,
|
||||||
});
|
|
||||||
|
|
||||||
poly.addTo(plugin.crossLinks.linkLayer);
|
guid: link.options.guid
|
||||||
|
});
|
||||||
|
|
||||||
|
poly.addTo(plugin.crossLinks.linkLayer);
|
||||||
|
plugin.crossLinks.linkLayerGuids[link.options.guid]=poly;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.plugin.crossLinks.onMapDataRefreshEnd = function () {
|
window.plugin.crossLinks.onMapDataRefreshEnd = function () {
|
||||||
@ -205,16 +214,30 @@ window.plugin.crossLinks.onMapDataRefreshEnd = function () {
|
|||||||
window.plugin.crossLinks.linkLayer.bringToFront();
|
window.plugin.crossLinks.linkLayer.bringToFront();
|
||||||
delete window.plugin.crossLinks.reorderLinkLayer;
|
delete window.plugin.crossLinks.reorderLinkLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.plugin.crossLinks.testForDeletedLinks();
|
||||||
|
}
|
||||||
|
|
||||||
|
window.plugin.crossLinks.testForDeletedLinks = function () {
|
||||||
|
window.plugin.crossLinks.linkLayer.eachLayer( function(layer) {
|
||||||
|
var guid = layer.options.guid;
|
||||||
|
if (!this.seenLinksGuid[guid]) {
|
||||||
|
console.log("link removed");
|
||||||
|
plugin.crossLinks.linkLayer.removeLayer(layer);
|
||||||
|
delete plugin.crossLinks.linkLayerGuids[guid];
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
window.plugin.crossLinks.createLayer = function() {
|
window.plugin.crossLinks.createLayer = function() {
|
||||||
window.plugin.crossLinks.linkLayer = new L.FeatureGroup();
|
window.plugin.crossLinks.linkLayer = new L.FeatureGroup();
|
||||||
|
window.plugin.crossLinks.linkLayerGuids={};
|
||||||
window.addLayerGroup('Cross Links', window.plugin.crossLinks.linkLayer, true);
|
window.addLayerGroup('Cross Links', window.plugin.crossLinks.linkLayer, true);
|
||||||
window.plugin.crossLinks.reorderLinkLayer = true;
|
window.plugin.crossLinks.reorderLinkLayer = true;
|
||||||
|
|
||||||
map.on('layeradd', function(obj) {
|
map.on('layeradd', function(obj) {
|
||||||
if(obj.layer === window.plugin.crossLinks.linkLayer) {
|
if(obj.layer === window.plugin.crossLinks.linkLayer) {
|
||||||
window.plugin.crossLinks.disabled = undefined;
|
delete window.plugin.crossLinks.disabled;
|
||||||
window.plugin.crossLinks.checkAllLinks();
|
window.plugin.crossLinks.checkAllLinks();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user