Greasemonkey script for easy river drawing

Discussion for the unofficial, community-developed addons, extensions and scripts built for the Waze Map Editor.

The official index of these tools is the Community Plugins, Extensions and Tools wiki page.

Moderators: Unholy, bextein

Forum rules
Discussion for the unofficial, community-developed addons, extensions and scripts built for the Waze Map Editor.

DO NOT START a new thread unless it is about a new idea. Keep discussion of existing tools within the main thread for that tool.

The official index of these tools is the Community Plugins, Extensions and Tools wiki page.

Re: Greasemonkey script for easy river drawing

Postby Kuhlkatz » Fri Apr 05, 2013 3:05 pm

The problem is likely that you still have an older version.
Make sure that it is version 12.12.20.1, else the buttons will not appear due to the older panel / div names in the older script. It also piggybacks onto the selection manager, where the older one did not.

Sent from my HTC Sensation Z710e using Tapatalk 2
Carel Cornelius
AM : Centurion & Sandton, ZA
CM & Coordinator, South Africa
(HTC One, Android 5.0.2, v7.19.401.51)
Image
South African Wiki Waze Wiki Map Editing
Kuhlkatz
Waze Local Champs
Waze Local Champs
 
Posts: 1834
Joined: Fri Jul 20, 2012 6:11 pm
Location: Centurion, Pretoria, South Africa
Has thanked: 39 times
Been thanked: 160 times

Re: Greasemonkey script for easy river drawing

Postby ispyisail » Sun Apr 08, 2012 9:59 pm

This gets me grumpy

save.jpg
save.jpg (33.54 KiB) Viewed 4870 times


I draw a massive long river then I get this error and I have to start all over

Does any body else get this or is it just me?
New Zealand and Papua New Guinea Country Manager
ImageImageImage
ispyisail
Waze Local Champs
Waze Local Champs
 
Posts: 6734
Joined: Tue Feb 21, 2012 11:59 pm
Location: New Zealand
Has thanked: 573 times
Been thanked: 555 times

Re: Greasemonkey script for easy river drawing

Postby ispyisail » Sun Apr 08, 2012 9:51 pm

Thanks

smacks hand against head

That was the problem

Question: the river gets smaller in width as its gets longer. can you join land marks together to create a variable width river?
New Zealand and Papua New Guinea Country Manager
ImageImageImage
ispyisail
Waze Local Champs
Waze Local Champs
 
Posts: 6734
Joined: Tue Feb 21, 2012 11:59 pm
Location: New Zealand
Has thanked: 573 times
Been thanked: 555 times

Re: Greasemonkey script for easy river drawing

Postby ispyisail » Sun Apr 08, 2012 6:58 pm

You seem to be using tampermonkey? (If yes, then) stop using it and install again. That worked for me.


Thanks, that fixed the install problem

The problem now is its says

road to riner 3.jpg
road to riner 3.jpg (76.02 KiB) Viewed 4881 times


But no river is created?
New Zealand and Papua New Guinea Country Manager
ImageImageImage
ispyisail
Waze Local Champs
Waze Local Champs
 
Posts: 6734
Joined: Tue Feb 21, 2012 11:59 pm
Location: New Zealand
Has thanked: 573 times
Been thanked: 555 times

Re: Greasemonkey script for easy river drawing

Postby ispyisail » Sat Apr 07, 2012 10:28 am

I can't get this script to install/work in chrome, any tips

Google Chrome 18.0.1025.151 m

street to river.jpg
street to river.jpg (26.15 KiB) Viewed 4816 times


street to river 2.jpg
street to river 2.jpg (135.17 KiB) Viewed 4818 times
New Zealand and Papua New Guinea Country Manager
ImageImageImage
ispyisail
Waze Local Champs
Waze Local Champs
 
Posts: 6734
Joined: Tue Feb 21, 2012 11:59 pm
Location: New Zealand
Has thanked: 573 times
Been thanked: 555 times

Re: Greasemonkey script for easy river drawing

Postby gerben » Sun Jun 01, 2014 9:22 am

Locked
Nokia Lumia 920 (WP8 3.7.6 client)
Countrymanager The Netherlands
ImageImageImageImage
gerben
 
Posts: 5850
Joined: Sun Dec 13, 2009 10:42 pm
Location: Almelo
Has thanked: 33 times
Been thanked: 196 times

Re: Greasemonkey script for easy river drawing

Postby gerben » Wed Feb 08, 2012 11:23 am

It works fine for me in Chrome. Did you restart the browser or at least refresh the page after installation?
Nokia Lumia 920 (WP8 3.7.6 client)
Countrymanager The Netherlands
ImageImageImageImage
gerben
 
Posts: 5850
Joined: Sun Dec 13, 2009 10:42 pm
Location: Almelo
Has thanked: 33 times
Been thanked: 196 times

Re: Greasemonkey script for easy river drawing

Postby gerben » Sun Jan 29, 2012 11:48 pm

This tool has stopped working because the url for the editor has canged.

Working code:

Code: Select all
// ==UserScript==
// @name Papyrus: Street to river
// @description This script create a new river landmark in waze editor papyrus. It transforms the the geometry of a new unsaved street to a polygon.
// @namespace http://www.tay-tec.de/waze-street-to-river
// @match https://world.waze.com/editor/*
// @match https://www.waze.com/editor/*
// ==/UserScript==


// Mini howto:
// 1) install this script as greasemonkey script or chrome extension
// 2) draw a new street but do not save the street
// 3) add and apply a street name to define the rivers name and the the width of the river
//    Example: "20m Spree" creates a 20 meters width river named "Spree"
// 4) Select the helper street
// 5) Click the "Street to river" button
// 4) Delete the helper street
// 5) Edit the new landmark as you like


if ('undefined' == typeof __RTLM_PAGE_SCOPE_RUN__) {
  (function page_scope_runner() {
    // If we're _not_ already running in the page, grab the full source
    // of this script.
    var my_src = "(" + page_scope_runner.caller.toString() + ")();";

    // Create a script node holding this script, plus a marker that lets us
    // know we are running in the page scope (not the Greasemonkey sandbox).
    // Note that we are intentionally *not* scope-wrapping here.
    var script = document.createElement('script');
    script.setAttribute("type", "text/javascript");
    script.textContent = "var __RTLM_PAGE_SCOPE_RUN__ = true;\n" + my_src;

    // Insert the script node into the page, so it will run, and immediately
    // remove it to clean up.  Use setTimeout to force execution "outside" of
    // the user script scope completely.
    setTimeout(function() {
          document.body.appendChild(script);
          document.body.removeChild(script);
        }, 0);
  })();

  // Stop running, because we know Greasemonkey actually runs us in
  // an anonymous wrapper.
  return;
}


function streetToRiver() {
 
 var defaultWidth = 20;

  insertButton();

  function insertButton() {
    var btn = $('<button title="create a new street, select and click this button">Street to river</button>');
    btn.click(start);
    var cnt = $('<div style="padding:0.5em 15px; background:#333; color:#fff"/>');
    cnt.append(btn);
    $("div.contents","#editPanel").after(cnt);
    console_log("Street to river initialized");
  }

  function start(ev) {
    var foundSelectedSegment = false;
    for (var s=selectionManager.selectedItems.length-1; s>=0; s--) {
      var sel = selectionManager.selectedItems[s];
      if (sel.type == "segment" && sel.state == "Insert") {
   // found segment
   foundSelectedSegment = true;
   if (convertToLandmark(sel))
   {
     alert("Successfully created new river landmark");
   }
      }
    }
    if (! foundSelectedSegment) {
   alert("No unsaved and selected new street found!");
      }
  }

  function convertToLandmark(sel) {
   
    var leftPa, rightPa, leftPb, rightPb;
    var prevLeftEq, prevRightEq;
    var street = getStreet(sel);
   
    var displacement = getDisplacement(street);
   
    var polyPoints = null;
    var vertices = sel.geometry.getVertices();
    for (var i=vertices.length-1; i>0; i--)
    {
      var pa = vertices[i];
      var pb = vertices[i-1];
      var scale = (pa.distanceTo(pb) + displacement) / pa.distanceTo(pb);
     
      leftPa = pa.clone();
      leftPa.resize(scale, pb, 1);
      rightPa = leftPa.clone();
      leftPa.rotate(90,pa);
      rightPa.rotate(-90,pa);
     
      leftPb = pb.clone();
      leftPb.resize(scale, pa, 1);
      rightPb = leftPb.clone();
      leftPb.rotate(-90,pb);
      rightPb.rotate(90,pb);
     
      var leftEq = getEquation({ 'x1': leftPa.x, 'y1': leftPa.y, 'x2': leftPb.x, 'y2': leftPb.y });
      var rightEq = getEquation({ 'x1': rightPa.x, 'y1': rightPa.y, 'x2': rightPb.x, 'y2': rightPb.y });
      if (polyPoints == null) {
   polyPoints = [ leftPa, rightPa ];
      }
      else {
   var li = intersectX(leftEq, prevLeftEq);
   var ri = intersectX(rightEq, prevRightEq);
   if (li && ri) {
     polyPoints.unshift(li);   
     polyPoints.push(ri);
   }
   else {
     polyPoints.unshift(leftPb.clone());
     polyPoints.push(rightPb.clone());
   }
      }

      prevLeftEq = leftEq;
      prevRightEq = rightEq;
    }
   
    polyPoints.push(rightPb);
    polyPoints.push(leftPb);
   
    var polygon = new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(polyPoints));
   
    var landmark = new Waze.Feature.Vector.Landmark(polygon);
    landmark.attributes.mtfcc = "H3010";
    if (street) {
      landmark.attributes.name = street.name.replace(/^\d+(m|ft)\s*/, '');
    }
    var what = wazeModel.actionManager.add(new Waze.Action.AddLandmark(landmark));
   
    return true;
  }

 
  function getEquation(segment) {
    if (segment.x2 == segment.x1)
      return { 'x': segment.x1 };
   
    var slope =  (segment.y2 - segment.y1) / (segment.x2 - segment.x1);
    var offset = segment.y1 - (slope  * segment.x1)
    return { 'slope': slope, 'offset': offset };
  }

  //
  // line A: y = ax + b
  // line B: y = cx + b
  //
  // x = (d - b) / (a - c)
  function intersectX(eqa,eqb,defaultPoint) {
    if ("number" == typeof eqa.slope && "number" == typeof eqb.slope) {
      if (eqa.slope == eqb.slope)
   return null;
     
      var ix = (eqb.offset - eqa.offset) / (eqa.slope - eqb.slope);
      var iy = eqa.slope * ix + eqa.offset;
      return new OpenLayers.Geometry.Point(ix, iy);
    }
    else if ("number" == typeof eqa.x) {
      return new OpenLayers.Geometry.Point(eqa.x, eqb.slope * eqa.x + eqb.offset);
    }
    else if ("number" == typeof eqb.y) {
      return new OpenLayers.Geometry.Point(eqb.x, eqa.slope * eqb.x + eqa.offset);
    }
    return null;
  }
 

  function getStreet(segment) {
    if (! segment.attributes.primaryStreetID)
      return null;
    var street = segment.model.streets.get(segment.attributes.primaryStreetID)
    return street;
  }
 
  function getDisplacement(street) {
    if (! street)
      return defaultWidth;
    if (street.name.match(/^(\d+)m\b/))
      return parseInt(RegExp.$1);
    if (street.name.match(/^(\d+)ft\b/))
      return parseInt(RegExp.$1) * 0.3048;
    return defaultWidth;
  }
 
  function console_log(msg) {
    if (console.log)
      console.log(msg);
  }
}

   


streetToRiver();
Nokia Lumia 920 (WP8 3.7.6 client)
Countrymanager The Netherlands
ImageImageImageImage
gerben
 
Posts: 5850
Joined: Sun Dec 13, 2009 10:42 pm
Location: Almelo
Has thanked: 33 times
Been thanked: 196 times

Re: Greasemonkey script for easy river drawing

Postby gerben » Tue Jan 03, 2012 5:43 pm

This tool might be useable to make railroads visible in the client too. I'll try this tonight (not sure if there is an appropriate landmark type).
Nokia Lumia 920 (WP8 3.7.6 client)
Countrymanager The Netherlands
ImageImageImageImage
gerben
 
Posts: 5850
Joined: Sun Dec 13, 2009 10:42 pm
Location: Almelo
Has thanked: 33 times
Been thanked: 196 times

Re: Greasemonkey script for easy river drawing

Postby gerben » Thu Dec 29, 2011 2:50 am

I don't get the street-to-river button, or I don't see it. Where should it be?
Nokia Lumia 920 (WP8 3.7.6 client)
Countrymanager The Netherlands
ImageImageImageImage
gerben
 
Posts: 5850
Joined: Sun Dec 13, 2009 10:42 pm
Location: Almelo
Has thanked: 33 times
Been thanked: 196 times

PreviousNext

Return to Addons, Extensions, and Scripts

Who is online

Users browsing this forum: No registered users