Open WME in EST

Opens the current Waze Map Editor view in Estonian Land Board Geoportal

// ==UserScript==
// @name            Open WME in EST
// @description     Opens the current Waze Map Editor view in Estonian Land Board Geoportal
// @version         2.0
// @grant           none
// @match           *://*.waze.com/*editor*
// @include         https://xgis.maaamet.ee/maps/*
// @include         https://xgis.maaamet.ee/xgis2/page/app/*
// @require         https://greasyfork.org/scripts/383120-proj4-wazedev/code/proj4-Wazedev.js
// @author          script is based from orignal google maps script, modified by rain101 & LihtsaltMats
// @namespace       https://greasyfork.org/users/207621
// @license         GPLv3
// ==/UserScript==

/* global proj4 */

console.log("WME_EE BEGINNING");

let wmeSDK;
window.SDK_INITIALIZED.then(() => {
    wmeSDK = getWmeSdk({ scriptId: "open-wme-in-est", scriptName: "Open WME in EST" });
    wmeSDK.Events.once({ eventName: "wme-ready" }).then(init);
});

const ESTONIAN_PROJECTION = '+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs';
const WGS84 = 'WGS84'

const LANDBOARD = 'LANDBOARD';
const AERIAL = 'AERIAL';

const FLAG_ICON = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAArUlEQVQokbXMPQ6CMBxA8X80EMpgcdBRowaMB2NquKKLxEQ08WOCiR4BptLpeYjqS37rk5OpyU1Dbm7BjuaK5ObGzrzYmWegF7lpkKK6s68+7Kt3oA9F9UAO5ZlNWbMtL4FqDuUZUYs1syRjrpZBZklGslghcRwjIj8RRdEfhlprlFKkaRpEKYXWGmnbFmstfd8HsdbSdR3inONXOef+MByGAe890zQF8d4zjiNfdeREmfFbjlgAAAAASUVORK5CYII=';
const PLANE_ICON = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAOlJREFUOE+l08EqhFEYxvHfXIHsFNdgPXZyB1Y2GlmOhNIkq+EWpCE7FNmwZINcCKNETZQFxcJCbx01HcPHfGd5znP+73ue9zkVJVcluz+DOg6w8Rd2DhhCEy+4xGkRJAeEfhfL2MQq2r9BArCAI3SScAKjOMQOpvD+EyQA0eotZpMo9k4wiSpqyZeejBDv4QkD+EiqMSzhAnMYx3NGeEArACs4x3UmeOtqfbBH+WGslwGMYC0A+3js4wn32ArAFW7KmLiIY9z1O8bcnwhSA9spUIVB6gZ8Rfk1Tebsv1GexnyZz1RU8Nv5J34QOZVIUV5/AAAAAElFTkSuQmCC'

function gen_url(type) {
    const { lon, lat } = wmeSDK.Map.getMapCenter();

    let zoom = wmeSDK.Map.getZoomLevel(); // Waze zoom levels start from 4 to 22 now

    // Normal Flash Estonian Landboard page
    // return 'http://xgis.maaamet.ee/xGIS/XGis?app_id=UU82&user_id=at&punkt=' + point.x + ',' + point.y + '&moot=4000';

    // HTML5 Estonian Landboard page
    // return 'http://xgis.maaamet.ee/maps/XGis?app_id=UU82A&user_id=at&zlevel=' + zoom + ',' + point.x + ',' + point.y;

    //https://xgis.maaamet.ee/xgis2/page/app/maainfo?punkt=542228.98,6588663.63&moot=2000
    //https://xgis.maaamet.ee/xgis2/page/app/maainfo?punkt=6580101.69,549967.00&moot=100
    if (type === LANDBOARD) {
        const [x, y] = proj4(WGS84, ESTONIAN_PROJECTION, [lon, lat]);
        zoom = zoom - 12; // Waze zoom levels start from 4 to 22 now
        if (zoom < 0) {
            zoom = 0;
        }
        const array = [61440, 30720, 15360, 7680, 3840, 1920, 960, 480, 240, 120, 60];
        return `https://xgis.maaamet.ee/xgis2/page/app/maainfo?punkt=${x},${y}&moot=${array[zoom]}`;
    }
    if (type === AERIAL) {
        zoom = zoom - 4; // seems to keep aerial photo height on WME level
        return `https://fotoladu.maaamet.ee/?basemap=hybriidk&zlevel=${zoom},${lon},${lat}`;
    }
    throw new Error(`Unknown type: ${type}`);
}

function init() {
    const section = document.createElement('div');
    section.style.padding = '8px 16px';

    section.innerHTML = `
        <span id="WMEtoEE" style="display: inline-block;">
            <img src="${FLAG_ICON}" alt="EE" id="WMEtoEEImg" title="Open in Estonian Landboard" style="cursor: pointer; float: left; margin: 2px 5px 0 3px;">
            <img src="${PLANE_ICON}" alt="Aero" id="WMEtoAero" title="Open Aerial Photos" style="cursor: pointer; float: left; margin: 2px 5px 0 3px;">
        </span>
    `;

    const insertPath = '.WazeControlPermalink';
    document.querySelector(insertPath).prepend(section);

    document.getElementById('WMEtoEEImg').addEventListener('click', function () {
        window.open(gen_url(LANDBOARD), '_blank');
    });

    document.getElementById('WMEtoAero').addEventListener('click', function () {
        window.open(gen_url(AERIAL), '_blank');
    });

    console.log("WME_EE done");
}