Greasy Fork is available in English.

WME GIS Locator

opens associated county GIS map and takes you to the latitude and longitude you were at (in WME) on the GIS map just opened.

// ==UserScript==
// @name         WME GIS Locator
// @namespace    https://greasyfork.org/en/users/173378-ramblinwreck
// @version      2024-09-25
// @description  opens associated county GIS map and takes you to the latitude and longitude you were at (in WME) on the GIS map just opened.
// @author       ramblinwreck_81
// @match         *://*.waze.com/*editor*
// @match      https://qpublic.schneidercorp.com
// @include *qpulbic.schneidercorp.com*
// @exclude      https://www.waze.com/user/editor*
// @grant GM_setClipboard
// @require      https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
 

// ==/UserScript==
// This script requires WME GIS Buttons script installed
// Because necessary code must be run after the qpublic or schneidercorp page loads, that script (code) is WME-to-Schneider-corp_GIS_Interface.  That code is unique to that
// qpublic or schneidercorp web page.
(function() {
    'use strict';
    var settings = {};
    console.log('GIS-Locator: initiating anonymous function');
    function bootstrap(tries) {
         tries = tries || 1;
        if (W && W.map &&
            W.model && W.loginManager.user)
        {
            console.log('GIS-Locator: initializing WMEGL');
            WMEGLinit();
        } else if (tries < 1000) {
            setTimeout(function () {bootstrap(tries++);}, 200);
         }
    }
 
    function WMEGLinit() {
        init();
    }
 
    function init()
    {
        var $section = $("<div>");
        $section.html([
            '<div id="GIS_Locator">',
            '<h2>GIS Locator</h2>',
            '<input type="checkbox" id="WMEGLEnabled" class="WMEGLSettingsCheckbox"><label for="WMEGLEnabled">Enable This Script</label>',
            '<hr>',
            '<input type="checkbox" id="WMEGLopen2ndWMEWindow" class="WME2window"><label for="WMEGL2ndWin">Open Second WME Window on Locate</label>',
            '<hr>',
            '<div>',
            '<h3>Last latitude and longitude Info</h3>',
            'Latitude: <span id="WMEGLlatitude"></span></br>',
            'Longitude: <span id="WMEGLlongitude"></span></br>',
            '</div>',
            '</div>'
        ].join(' '));
 
        const { tabLabel, tabPane} = W.userscripts.registerSidebarTab('GIS Locator');
        tabLabel.innerHTML = 'GIS Locator';
        tabPane.innerHTML = $section.html();
        W.userscripts.waitForElementConnected(tabPane).then(() => {
            initializeSettings();
            addLocateButton();
        });

//        addLocateButton();
        function addLocateButton () {
 
            var WMEGLy = document.createElement('div');
            WMEGLy.setAttribute('id', 'lat-long-info');
            WMEGLy.setAttribute('style', 'display:inline;');
            document.getElementById('GIS_Locator').appendChild(WMEGLy);
            var WMEGLbb = document.createElement('button');
            WMEGLbb.setAttribute('type', 'button');
            WMEGLbb.setAttribute('value', 'Submit');
            WMEGLbb.setAttribute('id', 'WME-GIS-locator');
            WMEGLbb.setAttribute('title', 'initiate WME GIS Locator script');
            WMEGLbb.innerHTML = 'Locate';
            document.getElementById('lat-long-info').appendChild(WMEGLbb);
            document.getElementById("WME-GIS-locator").style.height="20px";
            document.getElementById("WME-GIS-locator").style.width="50px";
            document.getElementById('WME-GIS-locator').style.padding='1px';
            document.getElementById("WME-GIS-locator").addEventListener("click",localize, false);
            if(settings.Enabled) {
               document.getElementById('WME-GIS-locator').disabled = false;
            } else {
                document.getElementById('WME-GIS-locator').disabled = true;
            }
        }// end of addLocateButton function
 
        function localize()
        {
            if(document.getElementById('gisStatus'))
            {
                var gisButtonsButton = document.getElementById('gisStatus');
            } else {
                alert('Script GIS Buttons must be loaded in order to use this script.')
            }
            if(gisButtonsButton.style.color === 'red')
            {
                gisButtonsButton.click();
            }
            var WMEGLlatTimer;
            var WMEGLgetLat = false;
            document.getElementById('WME-GIS-locator').disabled = true;
            function get4326CenterPoint()
            {
                let projI = new OL.Projection("EPSG:900913");
                let projE = new OL.Projection("EPSG:4326");
                let center_lonlat = (new OL.LonLat(W.map.olMap.center.lon, W.map.olMap.center.lat)).transform(projI,projE);
                let lat = Math.round(center_lonlat.lat * 1000000) / 1000000;
                let lon = Math.round(center_lonlat.lon * 1000000) / 1000000;
                document.getElementById('WMEGLlatitude').innerHTML = lat;
                document.getElementById('WMEGLlongitude').innerHTML = lon;
                return new OL.LonLat(lon, lat);
            }
 
            let latlon = get4326CenterPoint();
            //document.getElementById('gisCounty').click();
            checkForGreen();
 
            function checkForGreen()
            {
                if(document.getElementById('gisStatus').style.color === 'green')
                {
                    clearTimeout(delay);
                    console.log('GIS Buttons verified running by GIS Locator');
                    finishIt();
                } else {
                    console.log('waiting for GIS Buttons...');
                    var delay = setTimeout(checkForGreen,250);
                }
            }
            function finishIt()
            {
                var WMEGLstr = document.getElementById('gisCounty').href;
                var string;
                var newURL;
                 if (WMEGLstr.indexOf('qpublic') > -1) {
                     // matched on qpublic
                     // string = 'http://qpublic9.qpublic.net/qpmap4/map.php?county=ga_fulton&layers=parcels+roads+lakes&mapmode';
                     // https://qpublic.schneidercorp.com/Application.aspx?App=LancasterCountySC
                     var equal = WMEGLstr.indexOf('=');
                     var ampersand = WMEGLstr.indexOf('&');
                     console.log(ampersand);
                     var oldCounty = WMEGLstr.substr(equal, ampersand - equal);
                     oldCounty = $('#gisCounty')[0].text;
                     var space =oldCounty.indexOf(' ');
                     oldCounty = oldCounty.substr(0, space) + oldCounty.substr(space +1)
                     console.log('oldCounty is: ' + oldCounty);
 //                    var underSc = oldCounty.indexOf('_');
                     var newCounty = oldCounty
                     var firstLtr = newCounty.substr(0,1);
                     firstLtr = firstLtr.toUpperCase();
                     if ($('#gisState')[0].text === 'Georgia') {
                         newCounty = firstLtr + newCounty.substr(1) + 'GA';
                     } else {
                         newCounty = firstLtr + newCounty.substr(1) + 'SC';
                     }
                     newURL = 'https://qpublic.schneidercorp.com/Application.aspx?App=' + newCounty //+ '&Layer=Parcels&PageType=Map';
                     console.log('WMEGL new URL is ' + newURL);
 
                } else {
 
                    // no match on qpublic
                    newURL = WMEGLstr;
                    console.log('WMEGL new URL is ' + newURL);
               }
//                window.open(newURL,'gisPage');
 
 
                // end of new code
 
 
                if(settings.open2ndWMEWindow) {
                    var WMEGLurl = 'https://www.waze.com/en-US/editor/?env=usa&lon=' + latlon.lon + '&lat=' + latlon.lat + '&zoom=4';
                    window.open(WMEGLurl,'wmeDup');
                }
                WMEGLcreateElements();

                function WMEGLthisTimeLat() {
                    clearInterval(WMEGLlatTimer);
                    erase();
                } // end of WMEGLthisTimeLat function
//                function WMEGLReset()
//                {
//                    clearInterval(delayTimer);

                function WMEGLcreateElements()
                {
 
                    //var WMEGLz=document.createElement("button");
                    //WMEGLz.setAttribute("type", "button");
                    //WMEGLz.setAttribute("value", "Submit");
                    //WMEGLz.setAttribute("id","grab-long-lat");
                   // WMEGLz.setAttribute("title","Get Long");
                    //WMEGLz.innerHTML = "Get Longitude";
                    var WMEGLaa=document.createElement('textArea');
                    WMEGLaa.setAttribute("id", "long-and-lat-txt");
                    WMEGLaa.textContent = "";
                    document.getElementById("lat-long-info").appendChild(WMEGLaa);
                    //document.getElementById("lat-long-info").appendChild(WMEGLz);
                    //document.getElementById("grab-long-lat").style.height="20px";
                    //document.getElementById("grab-long-lat").style.width="100px";
                    var cancelIt = document.createElement('button');
                    cancelIt.setAttribute('type', 'button');
                    cancelIt.setAttribute('value', 'Cancel');
                    cancelIt.setAttribute('id', 'stop-lat-long');
                    cancelIt.setAttribute('title', 'Cancel Lat/Long');
                    document.getElementById('lat-long-info').appendChild(cancelIt);
                    document.getElementById('stop-lat-long').style.height = '20px';
                    document.getElementById('stop-lat-long').style.width = '100px';
                    cancelIt.innerHTML = "Cancel";
                    document.getElementById('stop-lat-long').addEventListener('click', erase,false);
 
                } // end of WMGGLcreateElements function
 
                function erase()
                {
                    document.getElementById('WME-GIS-locator').disabled = false;
                 //   document.getElementById("grab-long-lat").removeEventListener('click',coordinates, false);
                    var removeElement = document.getElementById("grab-long-lat");
                 //   removeElement.parentNode.removeChild(removeElement);
                    removeElement = document.getElementById('long-and-lat-txt');
                    removeElement.parentNode.removeChild(removeElement);
                    removeElement = document.getElementById('stop-lat-long');
                    removeElement.parentNode.removeChild(removeElement);
                }
                coordinates();
 
 
                function coordinates()
                {
                   // if(WMEGLgetLat !==true) {
                        console.log('latlon is: ' + latlon);
                        document.getElementById("long-and-lat-txt").textContent = latlon;
                        document.getElementById("long-and-lat-txt").select();
                        document.execCommand("copy");
                        //var WMEGLa = document.getElementById("grab-long-lat");
                        //WMEGLa.innerHTML = "Get Latitude";
                        //WMEGLgetLat = true;
                        console.log('lat/lon is: ' + latlon);

                   // } //else {
//                         document.getElementById("long-and-lat-txt").textContent = latlon;
//                         document.getElementById("long-and-lat-txt").select();
//                         document.execCommand("copy");
//                         console.log('lat/lon is: ' + latlon);
                        WMEGLlatTimer = setInterval(function(){WMEGLthisTimeLat();},4000);
                   // }
                    window.open(newURL,'gisPage');
                    if(gisButtonsButton.style.color === 'green')
                    {
                        debugger;
                        gisButtonsButton.click();
                    }
 //                   var delayTimer = setInterval(function(){WMEGLReset();},20000);
                }//end of coordinates function
 //               document.getElementById("grab-long-lat").addEventListener("click",coordinates, false);
            }
 
        }// end of localize function
 
    } // end of init function
    function initializeSettings()
    {
        loadSettings();
        setChecked('WMEGLEnabled', settings.Enabled);
        setChecked('WMEGLopen2ndWMEWindow', settings.open2ndWMEWindow);
 
        $('#WMEGLlatitude').text('');
        $('#WMEGLlongitude').text('');
        $('.WMEGLSettingsCheckbox').change(function() {
            var settingName = $(this)[0].id.substr(5);
            settings[settingName] = this.checked;
            saveSettings();
            if(settings.Enabled) {
                document.getElementById('WME-GIS-locator').disabled = false;
            } else {
                document.getElementById('WME-GIS-locator').disabled = true;
            }
            console.log(settingName + ' checkbox change saved');
        });
        $('#WMEGLopen2ndWMEWindow').change(function() {
            settings.open2ndWMEWindow = this.checked;
            saveSettings();
        });
    }
 
    function setChecked(checkboxId, checked)
    {
        $('#' + checkboxId).prop('checked', checked);
    }
 
    function saveSettings()
    {
        if (localStorage) {
            var localsettings = {
                Enabled: settings.Enabled,
                open2ndWMEWindow: settings.open2ndWMEWindow,
 
            };
 
            localStorage.setItem("WMEGL_Settings", JSON.stringify(localsettings));
        }
        if(settings.Enabled) {
            document.getElementById('WME-GIS-locator').disabled = false;
        } else {
            document.getElementById('WME-GIS-locator').disabled = true;
        }
    }
 
    function loadSettings()
    {
        var loadedSettings = $.parseJSON(localStorage.getItem("WMEGL_Settings"));
        var defaultSettings = {
            Enabled: false,
            open2ndWMEWindow: false,
        };
        settings = loadedSettings ? loadedSettings : defaultSettings;
        for (var prop in defaultSettings) {
            if (!settings.hasOwnProperty(prop)) {
                settings[prop] = defaultSettings[prop];
            }
        }
 
    }
    bootstrap();
})();