Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Simplify
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description
- // @include https://www.waze.com/editor*
- // @include https://www.waze.com/*/editor*
- // @include https://beta.waze.com/*
- // @exclude https://www.waze.com/user/editor*
- // @grant none
- // @require https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
- // ==/UserScript==
- (function() {
- var UpdateSegmentGeometry;
- var upperLimit = 100;
- function bootstrap(tries = 1) {
- if (W &&
- W.map &&
- W.model &&
- WazeWrap.Ready &&
- $) {
- init();
- } else if (tries < 1000) {
- setTimeout(function () {bootstrap(tries++);}, 200);
- }
- }
- bootstrap();
- function init(){
- UpdateSegmentGeometry = require('Waze/Action/UpdateSegmentGeometry');
- new WazeWrap.Interface.Shortcut('simplifyGeom', 'Simplifies the geometry of onscreen segments', 'editing', 'Editing', 'S+1', SimplifyGeometry, null).add();
- }
- function SimplifyGeometry(){
- var i = 0;
- _.each(WazeWrap.Model.getOnscreenSegments(),function(v,k){
- if(i < upperLimit && !WazeWrap.Model.isRoundaboutSegmentID(v.attributes.id) && v.geometry.components.length > 2 && NeedsSimplified(v) && v.isGeometryEditable()){ //stay under the 100 change cap, don't touch RA segments & is editable (lock level & no closure)
- W.model.actionManager.add(new UpdateSegmentGeometry(v, v.geometry, v.geometry.simplify(0.6)));
- i++;
- }
- });
- }
- function NeedsSimplified(seg){
- var attr = seg.attributes;
- var dmax = 2.5;
- var ax = Math.abs(seg.geometry.components[0].x - seg.geometry.components[1].x);
- var ay = Math.abs(seg.geometry.components[0].y - seg.geometry.components[1].y);
- var da = Math.sqrt(ax * ax + ay * ay);
- var bx = Math.abs(seg.geometry.components[seg.geometry.components.length - 2].x - seg.geometry.components[seg.geometry.components.length - 1].x);
- var by = Math.abs(seg.geometry.components[seg.geometry.components.length - 2].y - seg.geometry.components[seg.geometry.components.length - 1].y);
- var db = Math.sqrt(bx * bx + by * by);
- var a1 = null;
- var b1 = null;
- if (da < dmax)
- a1 = seg.geometry.components[1].clone();
- if (db < dmax)
- b1 = seg.geometry.components[seg.geometry.components.length - 2].clone();
- if (a1 != null && b1 != null && a1.x == b1.x && a1.y == b1.y)
- b1 = null;
- var geo = seg.geometry.simplify(0.6);
- if (seg.geometry.components.length != geo.components.length) {
- if (a1 != null) {
- if (a1.x != geo.components[1].x || a1.y != geo.components[1].y)
- geo.addPoint(a1, 1);
- }
- if (b1 != null) {
- if (b1.x != geo.components[geo.components.length - 2].x || b1.y != geo.components[geo.components.length - 2].y)
- geo.addPoint(b1, geo.components.length - 1);
- }
- }
- var reduced = seg.geometry.components.length - geo.components.length;
- if (reduced)
- return true;
- else
- return false;
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement