Open WME in EST

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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");
}