[Script] WME Junction Angle Info

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: [script] WME Junction Angle Info

Postby voludu2 » Mon Feb 02, 2015 3:32 pm

The JAI settings seem to be working for me in the native Chrome version.
Chrome Version 40.0.2214.94 m
If I enable the Native Chrome version from the Chrome store
* If I start WME with nothing selected, I get the behavior I would expect -- I see the JAI tab when I have no objects selected, after the Toolbox tab.
* If I start WME with a segment PL, I see what I expect from the JAI tab, but nothing happens when I click the JAI tab.
* If I start WME with a places permalink, I see the JAI tab with the other places tabs (General|More|photos|JAI). But after I click somewhere else on the screen, I never see the JAI tab again, even if I select the same place again. https://www.waze.com/editor/?env=usa&lo ... 792.621033)

If I disable the native Chrome version and enable the tamper monkey version
Junction Angle Information seems to load but not work -- I see the layer in the layers menu, but don't see the angles when I select a segment, and I never see the JAI tab.
Tampermonkey 3.9.202
Last edited by voludu2 on Mon Feb 02, 2015 4:16 pm, edited 1 time in total.

ImageState Manager - Pennsylvania
Country Manager - USA and Thailand
Wiki Master, Global Mentor
utilitas, simplicitas, retentionis
voludu2
Map Editor - Level 5
Map Editor - Level 5
 
Posts: 5152
Joined: Thu Jul 24, 2014 12:33 pm
Location: Chester County, Pennsylvania
Has thanked: 576 times
Been thanked: 906 times

Re: [Script] WME Junction Angle Info

Postby turbomkt » Fri Aug 04, 2017 7:38 pm

Arnoniem wrote:
turbomkt wrote:This is already highlighted by Toolbox. Or do you want the arrow to be highlighted?

Do you actually use/know this script?
EDIT: If you want to know what my request in the previous post is about, start reading this thread from page 44, where the IO was integrated in JAI.

I have the TB highlight, but I'm using JAI to show the actual IO in colour. There is no colour yet for continue, so I can't deviate NO instructions from CONTINUE instruction now, without accessing the IO popup.


Sure do. And the same as with others further back in the thread as you pointed out, missed the part where it was providing an indicator of TIO. I think a new option like this should be opt in rather than opt out, so you don't have to read through every single post to learn something has changed.
--Mike
Image Image
turbomkt
Waze Mentor
Waze Mentor
 
Posts: 951
Joined: Thu Jan 22, 2015 1:05 am
Location: San Diego, Ca
Has thanked: 277 times
Been thanked: 136 times

Re: [Script] WME Junction Angle Info

Postby turbomkt » Fri Aug 04, 2017 1:38 pm

This is already highlighted by Toolbox. Or do you want the arrow to be highlighted?
--Mike
Image Image
turbomkt
Waze Mentor
Waze Mentor
 
Posts: 951
Joined: Thu Jan 22, 2015 1:05 am
Location: San Diego, Ca
Has thanked: 277 times
Been thanked: 136 times

Re: [Script] WME Junction Angle Info

Postby turbomkt » Mon Jan 30, 2017 7:04 pm

bz2012 wrote:Weird problem with JAI in the India Map Raid.
Several editors seemed to be having problems with it but it was working ok in USA for them.

I did a 'binary search' and narrowed down the interfering extension to "WME closest segment" (which hasn't been working for me recently anyway). If I turn that extension off, JAI angles appear. With it on, they are gone. (all my other extension left on in both cases).


Which version of closest segment are you using?
--Mike
Image Image
turbomkt
Waze Mentor
Waze Mentor
 
Posts: 951
Joined: Thu Jan 22, 2015 1:05 am
Location: San Diego, Ca
Has thanked: 277 times
Been thanked: 136 times

Re: [Script] WME Junction Angle Info

Postby turbomkt » Fri Mar 04, 2016 6:05 am

taco909 wrote:95 + 75 is 170
But I see what you mean.

The angle is displayed differently when you select two segments vs one segment.
The turn angle is obviously over 90 degrees, yet is displayed as 75 rather than 104.


That's the key. The 105 degrees when individually selected shows as 75 when part of multiple selected segments and the 85 degrees individually is shown as 95. In the end it's still accurate to determine +/- 5 degrees for u-turns, but it threw me for a loop.
--Mike
Image Image
turbomkt
Waze Mentor
Waze Mentor
 
Posts: 951
Joined: Thu Jan 22, 2015 1:05 am
Location: San Diego, Ca
Has thanked: 277 times
Been thanked: 136 times

Re: [Script] WME Junction Angle Info

Postby turbomkt » Thu Mar 03, 2016 11:55 pm

Can someone corroborate something for me? On an H intersection, if I select the cross segment it shows the inside angles for all of the segments connected. When I select the three segments that make up a u-turn it looks like JAI calculates the angles for the three segments wrong. Is anyone seeing the same?

By my math the interior angles should be 190, JAI says 170.
https://www.waze.com/editor/?env=usa&lo ... ueFilter=1

Or I could be looking at this all wrong...
--Mike
Image Image
turbomkt
Waze Mentor
Waze Mentor
 
Posts: 951
Joined: Thu Jan 22, 2015 1:05 am
Location: San Diego, Ca
Has thanked: 277 times
Been thanked: 136 times

Re: [script] WME Junction Angle Info

Postby tonestertm » Thu Feb 20, 2014 5:15 am

For those of us who REALLY wish we knew jScript, when saving the code into xxx. user. js, should it be saved as plain text, and which Unicode?

I blame any errors on tapatalk... :)
Image
ARC for SW Region, USA
US Local Champ, US Country Manager
The best editors Read the Wiki and read it often. Learn the proper way to handle URs. Don't draw another Place until you read this!
tonestertm
US Waze Champs
US Waze Champs
 
Posts: 2433
Joined: Wed Nov 14, 2012 12:02 pm
Location: City of...um, Angels, CA, USA
Has thanked: 499 times
Been thanked: 813 times

Re: [script] WME Junction Angle Info

Postby tonestertm » Thu Feb 13, 2014 3:45 am

Looking forward to one of the updates I think I see in the code. :)

Maybe I shouldn't say anything, but my CWS 1.5.6 is still working along with Validator, CH, URO+, JNF standalone, Toolbox and Route Checker. (All latest)
Chrome Version 32.0.1700.107 m

Or, were you guys talking about Beta?
Image
ARC for SW Region, USA
US Local Champ, US Country Manager
The best editors Read the Wiki and read it often. Learn the proper way to handle URs. Don't draw another Place until you read this!
tonestertm
US Waze Champs
US Waze Champs
 
Posts: 2433
Joined: Wed Nov 14, 2012 12:02 pm
Location: City of...um, Angels, CA, USA
Has thanked: 499 times
Been thanked: 813 times

Re: [script] WME Junction Angle Info

Postby tkr85 » Mon Sep 29, 2014 7:04 pm

Working Version :)
Based on code from milkboy's GitHub.
What was fixed ?
In general:
Code: Select all
selectedItems[i].attributes   => selectedItems[i].model.attributes

and some minor changes.


Code: Select all
// ==UserScript==
// @name                WME Junction Angle info
// @namespace           http://userscripts.org/users/508112
// @description         Show the angle between two selected (and connected) segments
// @include             /^https:\/\/(www|editor-beta)\.waze\.com\/(.{2,6}\/)?editor\/.*$/
// @version             1.5.9.1
// @grant               none
// @copyright      2013 Michael Wikberg <michael@wikberg.fi>
// @license CC-BY-NC-SA
// ==/UserScript==

/**
 * Copyright 2014 Michael Wikberg <waze@wikberg.fi>
 * WME Junction Angle Info extension is licensed under a Creative Commons
 * Attribution-NonCommercial-ShareAlike 3.0 Unported License.
 *
 * Contributions by:
 *     2014 Paweł Pyrczak "tkr85" <support@pyrczak.pl>
 *     2014 "AlanOfTheBerg" <alanoftheberg@gmail.com>
 *     2014 "berestovskyy" <?>
 */

function run_ja() {

    var junctionangle_version = "1.5.9";
    var junctionangle_debug = 1;   //0: no output, 1: basic info, 2: debug 3: crazy debug
    var $;
    var ja_features = [];

    function ja_bootstrap() {
        try {
            if ((typeof window.Waze.map != undefined) && (undefined != typeof window.Waze.map.events.register) && (undefined != typeof window.Waze.selectionManager.events.register ) && (undefined != typeof window.Waze.loginManager.events.register)) {
                setTimeout(junctionangle_init, 500);
            } else {
                setTimeout(ja_bootstrap, 1000);
            }
        } catch (err) {
            setTimeout(ja_bootstrap, 1000);
        }
    }

    function ja_log(ja_log_msg, ja_log_level) {
        if (ja_log_level <= junctionangle_debug) {
            if (typeof ja_log_msg == "object") {
                //ja_log(arguments.callee.caller.toString(), ja_log_level);
                console.log(ja_log_msg);
            }
            else {
                console.log("WME Junction Angle: " + ja_log_msg);
            }
        }
    }

    function junctionangle_init() {

        //Listen for selected nodes change event
        window.Waze.selectionManager.events.register("selectionchanged", null, ja_calculate);

        window.Waze.model.segments.events.on({
            "objectschanged": ja_calculate,
            "objectsremoved": ja_calculate
        });
        window.Waze.model.nodes.events.on({
            "objectschanged": ja_calculate,
            "objectsremoved": ja_calculate
        });

        //HTML changes after login, even though the page is not reloaded. Better do init again.
        window.Waze.loginManager.events.register("afterloginchanged", null, junctionangle_init);

        /**
         * Make some style settings
         */
        var ja_style = new window.OpenLayers.Style({
            fillColor: "#ffcc88",
            strokeColor: "#ff9966",
            strokeWidth: 2,
            label: "${angle}",
            fontWeight: "bold",
            pointRadius: 10,
            fontSize: "10px"
        }, {
            rules: [
                new window.OpenLayers.Rule({
                    symbolizer: {
                    }
                }),
                new window.OpenLayers.Rule({
                    filter: new window.OpenLayers.Filter.Comparison({
                        type: window.OpenLayers.Filter.Comparison.EQUAL_TO,
                        property: "ja_type",
                        value: "junction"
                    }),
                    symbolizer: {
                        pointRadius: 13,
                        fontSize: "12px",
                        fillColor: "#4cc600",
                        strokeColor: "#183800"
                    }
                })
            ]
        });

        //Add support for translations. Default (and fallback) is "en".
        //Note, don't make typos in "acceleratorName", as it has to match the layer name (with whitespace removed
        // to actually work. Took me a while to figure that out...
        I18n.translations.en.layers.name["junction_angles"] = "Junction Angles";

        switch(window.I18n.locale) {
            case 'sv':
                I18n.translations.sv.layers.name["junction_angles"] = "Korsningsvinklar";
                break;
            case 'fi':
                I18n.translations.fi.layers.name["junction_angles"] = "Risteyskulmat";
                break;
        }

        layername = I18n.translate("layers.name.junction_angles","bar");

        //try to see if we already have a layer
        if (window.Waze.map.getLayersBy("uniqueName","junction_angles").length == 0) {

            // Create a vector layer and give it your style map.
            ja_mapLayer = new window.OpenLayers.Layer.Vector(layername, {
                displayInLayerSwitcher: true,
                uniqueName: "junction_angles",
                shortcutKey: "S+j",
                accelerator: "toggle" + layername.replace(/\s+/g,''),
                className: "junction-angles",
                styleMap: new window.OpenLayers.StyleMap(ja_style)
            });

            window.Waze.map.addLayer(ja_mapLayer);
            ja_log("version " + junctionangle_version + " loaded.", 0);

            ja_log(window.Waze.map, 3);
            ja_log(window.Waze.model, 3);
            ja_log(window.Waze.loginManager, 3);
            ja_log(window.Waze.selectionManager, 3);
            ja_log(ja_mapLayer, 3);
            ja_log(window.OpenLayers, 3);
        } else {
            ja_log("Oh, nice.. We already had a layer?", 3);
        }
    }

    function ja_calculate() {
        //clear old info
        ja_mapLayer.destroyFeatures();

        //try to show all angles for all selected segments
        if (window.Waze.selectionManager.selectedItems.length == 0) return 1;
        ja_log("Checking junctions for " + window.Waze.selectionManager.selectedItems.length + " segments", 2);
        var ja_nodes = [];

        for (i = 0; i < window.Waze.selectionManager.selectedItems.length; i++) {
            ja_log(window.Waze.selectionManager.selectedItems[i], 3);
            switch (window.Waze.selectionManager.selectedItems[i].model.type) {
                case "node":
                    ja_nodes.push(window.Waze.selectionManager.selectedItems[i].model.attributes.id);
                    break;
                case "segment":
                    //segments selected?
                    if (window.Waze.selectionManager.selectedItems[i].model.attributes.fromNodeID != null &&
                        ja_nodes.indexOf(window.Waze.selectionManager.selectedItems[i].model.attributes.fromNodeID) == -1) {
                        ja_nodes.push(window.Waze.selectionManager.selectedItems[i].model.attributes.fromNodeID);
                    }
                    if (ja_nodes.indexOf(window.Waze.selectionManager.selectedItems[i].model.attributes.toNodeID != null &&
                        ja_nodes.indexOf(window.Waze.selectionManager.selectedItems[i].model.attributes.toNodeID) == -1)) {
                        ja_nodes.push(window.Waze.selectionManager.selectedItems[i].model.attributes.toNodeID);
                    }
                    break;
                default:
                    ja_log("Found unknown item type: " + window.Waze.selectionManager.selectedItems[i].model.type, 1);
            }
        }

        ja_features = [];

        for (i = 0; i < ja_nodes.length; i++) {
            node = window.Waze.model.nodes.get(ja_nodes[i]);
            if (node == null || !node.hasOwnProperty('attributes')) {
                //Oh oh.. should not happen?
                ja_log("Oh oh.. should not happen?",1);
                ja_log(ja_nodes, 2);
                ja_log(window.Waze.model, 3);
                ja_log(window.Waze.model.nodes, 3);
                continue;
            }
            //check connected segments
            segments = node.attributes.segIDs;
            ja_log(node, 2);

            //ignore of we have less than 2 segments
            if (segments.length <= 1) {
                ja_log("Found only " + segments.length + " connected segments at " + ja_nodes[i] + ", not calculating anything...", 2);
                continue;
            }

            ja_log("Calculating angles for " + segments.length + " segments", 2);

            angles = [];
            selected_segments = 0;

            for (j = 0; j < segments.length; j++) {
                s = window.Waze.model.segments.get(segments[j]);
                a = ja_getAngle(ja_nodes[i], s);
                ja_log("j: " + j + "; Segment " + segments[j] + " angle is " + a, 3);
                angles[j] = [a, segments[j], s != null ? s.isSelected() : false];
                if (s != null ? s.isSelected() : false) selected_segments++;
            }

            ja_log(angles, 2);
            //sort angle data (ascending)
            angles.sort(function (a, b) {
                return a[0] - b[0]
            });
            ja_log(angles, 3);
            ja_log(selected_segments, 3);

            switch (window.Waze.map.zoom) {
                case 9:
                    ja_label_distance = 4;
                    break;
                case 8:
                    ja_label_distance = 8;
                    break;
                case 7:
                    ja_label_distance = 15;
                    break;
                case 6:
                    ja_label_distance = 25;
                    break;
                case 5:
                    ja_label_distance = 40;
                    break;
                case 4:
                    ja_label_distance = 80;
                    break;
                case 3:
                    ja_label_distance = 140;
                    break;
                case 2:
                    ja_label_distance = 300;
                    break;
                case 1:
                    ja_label_distance = 400;
                    break;
            }
            ja_log("zoom: " + window.Waze.map.zoom + " -> distance: " + ja_label_distance, 2);

            //if we have two connected segments selected, do some magic to get the turn angle only =)
            if (selected_segments == 2) {
                ja_selected = [];
                ja_extra_space_multiplier = 1;

                for (j = 0; j < angles.length; j++) {
                    if (angles[j][2]) {
                        ja_selected.push(angles[j]);
                    }
                }

                a = ((ja_selected[1][0] - ja_selected[0][0]) + 360) % 360;
                ha = (360 + (ja_selected[0][0] + ja_selected[1][0]) / 2) % 360;

                ja_log(a, 3);
                if (a < 60) {
                    ja_log("Sharp angle", 2);
                    ja_extra_space_multiplier = 2;
                }

                if (a > 180) {
                    //a2 = a - 180;
                    ha = ha + 180;
                }


                ja_log("Angle between " + ja_selected[0][1] + " and " + ja_selected[1][1] + " is " + a + " and position for label should be at " + ha, 3);

                //put the angle point
                ja_features.push(new window.OpenLayers.Feature.Vector(
                    new window.OpenLayers.Geometry.Point(
                        node.geometry.x + (ja_extra_space_multiplier * ja_label_distance * Math.cos((ha * Math.PI) / 180)),
                        node.geometry.y + (ja_extra_space_multiplier * ja_label_distance * Math.sin((ha * Math.PI) / 180))
                    )
                    , { angle: Math.round(Math.abs(180 - a)) + "°", ja_type: "junction" }
                ));
            }
            else {
                //get all segment angles
                for (j = 0; j < angles.length; j++) {
                    a = (360 + (angles[(j + 1) % angles.length][0] - angles[j][0])) % 360;
                    ha = (360 + ((a / 2) + angles[j][0])) % 360;

                    ja_log("Angle between " + angles[j][1] + " and " + angles[(j + 1) % angles.length][1] + " is " + a + " and position for label should be at " + ha, 3);
                    //push the angle point
                    ja_features.push(new window.OpenLayers.Feature.Vector(
                        new window.OpenLayers.Geometry.Point(
                            node.geometry.x + (ja_label_distance * Math.cos((ha * Math.PI) / 180)), node.geometry.y + (ja_label_distance * Math.sin((ha * Math.PI) / 180))
                        )
                        , { angle: Math.round(a) + "°", ja_type: "generic" }
                    ));
                }
            }
        }

        ja_log(ja_features, 2);
        //Update the displayed angles
        ja_mapLayer.addFeatures(ja_features);
    }

    function ja_points_equal(point1, point2) {
        return (point1.x == point2.x && point1.y == point2.y);
    }

    function ja_get_first_point(segment) {
        return segment.geometry.components[0];
    }

    function ja_get_last_point(segment) {
        return segment.geometry.components[segment.geometry.components.length - 1];
    }

    function ja_get_second_point(segment) {
        return segment.geometry.components[1];
    }

    function ja_get_next_to_last_point(segment) {
        return segment.geometry.components[segment.geometry.components.length - 2];
    }

    //get the absolute angle for a segment end point
    function ja_getAngle(ja_node, ja_segment) {
        if (ja_node == null || ja_segment == null) return null;
        if (ja_segment.attributes.fromNodeID == ja_node) {
            ja_dx = ja_get_second_point(ja_segment).x - ja_get_first_point(ja_segment).x;
            ja_dy = ja_get_second_point(ja_segment).y - ja_get_first_point(ja_segment).y;
        } else {
            ja_dx = ja_get_next_to_last_point(ja_segment).x - ja_get_last_point(ja_segment).x;
            ja_dy = ja_get_next_to_last_point(ja_segment).y - ja_get_last_point(ja_segment).y;
        }
        ja_log(ja_node + " / " + ja_segment + ": dx:" + ja_dx + ", dy:" + ja_dy);
        ja_angle = Math.atan2(ja_dy, ja_dx);
        return (360 + (ja_angle * 180 / Math.PI)) % 360;
    }

    ja_bootstrap();
}

//Dynamically create, add and run the script in the real page context
var DLscript = document.createElement("script");
DLscript.textContent = '' +
    run_ja.toString() + ' \n' +
    'run_ja();';
DLscript.setAttribute("type", "application/javascript");
document.body.appendChild(DLscript);



EDIT:
http://pyrczak.pl/j-A_160864.user.js
ImageImage
tkr85
Area Manager
Area Manager
 
Posts: 317
Joined: Sat Jan 01, 2011 1:05 am
Has thanked: 50 times
Been thanked: 136 times

Re: [script] WME Junction Angle Info

Postby tkr85 » Tue Mar 11, 2014 8:08 pm

Try AlanOfTheBerg 1.5.7.3 version. If still problems try one of this (CRX for Chrome):
http://pyrczak.pl/j-A_160864.user.js (Tampermonkey/Greasemoneky) -- strongly prefered !!!
http://pyrczak.pl/j-A.crx (Save on disk, then drag&drop to Chrome/Chromium Extensions Tab)
If there are still problems, please specify witch browser you using, and do you use greasemonkey/tempermonkey.
ImageImage
tkr85
Area Manager
Area Manager
 
Posts: 317
Joined: Sat Jan 01, 2011 1:05 am
Has thanked: 50 times
Been thanked: 136 times

PreviousNext

Return to Addons, Extensions, and Scripts

Who is online

Users browsing this forum: No registered users