Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Simplify
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description
  6. // @include      https://www.waze.com/editor*
  7. // @include      https://www.waze.com/*/editor*
  8. // @include      https://beta.waze.com/*
  9. // @exclude      https://www.waze.com/user/editor*
  10. // @grant        none
  11. // @require      https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
  12. // ==/UserScript==
  13.  
  14. (function() {
  15.  
  16.     var UpdateSegmentGeometry;
  17.     var upperLimit = 100;
  18.  
  19.     function bootstrap(tries = 1) {
  20.         if (W &&
  21.             W.map &&
  22.             W.model &&
  23.             WazeWrap.Ready &&
  24.             $) {
  25.             init();
  26.         } else if (tries < 1000) {
  27.             setTimeout(function () {bootstrap(tries++);}, 200);
  28.         }
  29.     }
  30.  
  31.     bootstrap();
  32.  
  33.     function init(){
  34.         UpdateSegmentGeometry = require('Waze/Action/UpdateSegmentGeometry');
  35.         new WazeWrap.Interface.Shortcut('simplifyGeom', 'Simplifies the geometry of onscreen segments', 'editing', 'Editing', 'S+1', SimplifyGeometry, null).add();
  36.     }
  37.  
  38.     function SimplifyGeometry(){
  39.         var i = 0;
  40.         _.each(WazeWrap.Model.getOnscreenSegments(),function(v,k){
  41.             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)
  42.                 W.model.actionManager.add(new UpdateSegmentGeometry(v, v.geometry, v.geometry.simplify(0.6)));
  43.                 i++;
  44.             }
  45.         });
  46.     }
  47.  
  48.     function NeedsSimplified(seg){
  49.         var attr = seg.attributes;
  50.  
  51.     var dmax = 2.5;
  52.         var ax = Math.abs(seg.geometry.components[0].x - seg.geometry.components[1].x);
  53.         var ay = Math.abs(seg.geometry.components[0].y - seg.geometry.components[1].y);
  54.         var da = Math.sqrt(ax * ax + ay * ay);
  55.         var bx = Math.abs(seg.geometry.components[seg.geometry.components.length - 2].x - seg.geometry.components[seg.geometry.components.length - 1].x);
  56.         var by = Math.abs(seg.geometry.components[seg.geometry.components.length - 2].y - seg.geometry.components[seg.geometry.components.length - 1].y);
  57.         var db = Math.sqrt(bx * bx + by * by);
  58.         var a1 = null;
  59.         var b1 = null;
  60.         if (da < dmax)
  61.             a1 = seg.geometry.components[1].clone();
  62.         if (db < dmax)
  63.             b1 = seg.geometry.components[seg.geometry.components.length - 2].clone();
  64.         if (a1 != null && b1 != null && a1.x == b1.x && a1.y == b1.y)
  65.             b1 = null;
  66.         var geo = seg.geometry.simplify(0.6);
  67.         if (seg.geometry.components.length != geo.components.length) {
  68.             if (a1 != null) {
  69.                 if (a1.x != geo.components[1].x || a1.y != geo.components[1].y)
  70.                     geo.addPoint(a1, 1);
  71.             }
  72.             if (b1 != null) {
  73.                 if (b1.x != geo.components[geo.components.length - 2].x || b1.y != geo.components[geo.components.length - 2].y)
  74.                     geo.addPoint(b1, geo.components.length - 1);
  75.             }
  76.         }
  77.         var reduced = seg.geometry.components.length - geo.components.length;
  78.         if (reduced)
  79.             return true;
  80.         else
  81.             return false;
  82.     }
  83. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement