plugin: max-links
- fix for API changes - change to perform triangulation in screen coordinates, rather than lat/lng treated as x/y coords. gives better triangulation - ignore portals outside the viewport for triangulation purposes - prevents artifact portals adding long triangles off the edge of the screen
This commit is contained in:
parent
3bfd83a0c2
commit
2b68487c4b
@ -2,7 +2,7 @@
|
|||||||
// @id max-links@boombuler
|
// @id max-links@boombuler
|
||||||
// @name IITC plugin: Max Links
|
// @name IITC plugin: Max Links
|
||||||
// @category Layer
|
// @category Layer
|
||||||
// @version 0.4.1.@@DATETIMEVERSION@@
|
// @version 0.4.2.@@DATETIMEVERSION@@
|
||||||
// @updateURL @@UPDATEURL@@
|
// @updateURL @@UPDATEURL@@
|
||||||
// @downloadURL @@DOWNLOADURL@@
|
// @downloadURL @@DOWNLOADURL@@
|
||||||
// @description [@@BUILDNAME@@-@@BUILDDATE@@] Calculates how to link the portals to create a reasonably tidy set of links/fields. Enable from the layer chooser. (Max Links is a poor name, but remains for historical reasons.)
|
// @description [@@BUILDNAME@@-@@BUILDDATE@@] Calculates how to link the portals to create a reasonably tidy set of links/fields. Enable from the layer chooser. (Max Links is a poor name, but remains for historical reasons.)
|
||||||
@ -22,27 +22,21 @@ window.plugin.maxLinks = function() {};
|
|||||||
|
|
||||||
// const values
|
// const values
|
||||||
window.plugin.maxLinks.MAX_PORTALS_TO_LINK = 200;
|
window.plugin.maxLinks.MAX_PORTALS_TO_LINK = 200;
|
||||||
|
// zoom level used for projecting points between latLng and pixel coordinates. may affect precision of triangulation
|
||||||
|
window.plugin.maxLinks.PROJECT_ZOOM = 16;
|
||||||
|
|
||||||
window.plugin.maxLinks.STROKE_STYLE = {
|
window.plugin.maxLinks.STROKE_STYLE = {
|
||||||
color: '#FF0000',
|
color: '#FF0000',
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
weight: 2,
|
weight: 1.5,
|
||||||
clickable: false,
|
clickable: false,
|
||||||
dashArray: [8,6],
|
dashArray: [6,4],
|
||||||
smoothFactor: 10,
|
smoothFactor: 10,
|
||||||
};
|
};
|
||||||
window.plugin.maxLinks.layer = null;
|
window.plugin.maxLinks.layer = null;
|
||||||
window.plugin.maxLinks.errorMarker = null;
|
window.plugin.maxLinks.errorMarker = null;
|
||||||
|
|
||||||
|
|
||||||
window.plugin.maxLinks.Point = function(x,y) {
|
|
||||||
this.x=x;
|
|
||||||
this.y=y;
|
|
||||||
}
|
|
||||||
window.plugin.maxLinks.Point.prototype.toString = function() {
|
|
||||||
return this.x+","+this.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
window.plugin.maxLinks.addErrorMarker = function() {
|
window.plugin.maxLinks.addErrorMarker = function() {
|
||||||
if (window.plugin.maxLinks.errorMarker == null) {
|
if (window.plugin.maxLinks.errorMarker == null) {
|
||||||
@ -81,10 +75,13 @@ window.plugin.maxLinks.updateLayer = function() {
|
|||||||
|
|
||||||
var locations = [];
|
var locations = [];
|
||||||
|
|
||||||
|
var bounds = map.getBounds();
|
||||||
$.each(window.portals, function(guid, portal) {
|
$.each(window.portals, function(guid, portal) {
|
||||||
var loc = portal.options.details.locationE6;
|
var ll = portal.getLatLng();
|
||||||
var nloc = new window.plugin.maxLinks.Point(loc.latE6/1E6, loc.lngE6/1E6);
|
if (bounds.contains(ll)) {
|
||||||
locations.push(nloc);
|
var p = map.project (portal.getLatLng(), window.plugin.maxLinks.PROJECT_ZOOM);
|
||||||
|
locations.push(p);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var triangles = window.delaunay.triangulate(locations);
|
var triangles = window.delaunay.triangulate(locations);
|
||||||
@ -117,7 +114,11 @@ window.plugin.maxLinks.updateLayer = function() {
|
|||||||
//using drawnLinks[a] as a set - so the stored value is of no importance
|
//using drawnLinks[a] as a set - so the stored value is of no importance
|
||||||
drawnLinks[a][b] = null;
|
drawnLinks[a][b] = null;
|
||||||
|
|
||||||
var poly = L.polyline([[a.x,a.y],[b.x,b.y]], window.plugin.maxLinks.STROKE_STYLE);
|
// convert back from x/y coordinates to lat/lng for drawing
|
||||||
|
var alatlng = map.unproject (a, window.plugin.maxLinks.PROJECT_ZOOM);
|
||||||
|
var blatlng = map.unproject (b, window.plugin.maxLinks.PROJECT_ZOOM);
|
||||||
|
|
||||||
|
var poly = L.polyline([alatlng, blatlng], window.plugin.maxLinks.STROKE_STYLE);
|
||||||
poly.addTo(window.plugin.maxLinks.layer);
|
poly.addTo(window.plugin.maxLinks.layer);
|
||||||
drawnLinkCount++;
|
drawnLinkCount++;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user