mMR West Bank overlay

Adds a region overlay for the 2018 West Bank (Israel) mMR

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         mMR West Bank overlay
// @namespace    https://greasyfork.org/users/45389
// @version      2018.03.04.001
// @description  Adds a region overlay for the 2018 West Bank (Israel) mMR
// @author       MapOMatic
// @include      /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
// @require      https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
// @license      None!  You may reuse this code for whatever you want.
// ==/UserScript==

(function() {
    'use strict';

    var _fillOpacity = 0.2;
    var _color = "Magenta";
    var _raid_mapLayer;

    function bootstrap() {
        if (W && W.loginManager && W.loginManager.isLoggedIn()) {
            InitMapRaidOverlay();
        } else {
            setTimeout(bootstrap, 500);
        }
    }

    bootstrap();

    function AddRaidPolygon(raidLayer,groupPoints,state1, state2){
        var mro_Map = Waze.map;
        var mro_OL = OpenLayers;

        var style = {
            strokeColor: _color,
            strokeOpacity: 0.30,
            strokeWidth: 3,
            fillColor: _color,
            fillOpacity: _fillOpacity,
            label: state1,
            labelOutlineColor: "Black",
            labelOutlineWidth: 3,
            fontSize: 14,
            fontColor: _color,
            fontOpacity: 0.85,
            fontWeight: "bold"
        };

        var attributes = {
            state1: state1,
            state2: state2
        };

        var pnt= [];
        for(let i=0;i<groupPoints.length;i++){
            let convPoint = new OpenLayers.Geometry.Point(groupPoints[i].lon,groupPoints[i].lat).transform(new OpenLayers.Projection("EPSG:4326"), mro_Map.getProjectionObject());
            pnt.push(convPoint);
        }

        var ring = new mro_OL.Geometry.LinearRing(pnt);
        var polygon = new mro_OL.Geometry.Polygon([ring]);

        var feature = new mro_OL.Feature.Vector(polygon,attributes,style);
        raidLayer.addFeatures([feature]);
    }

    function CurrentRaidLocation(raid_mapLayer){
        var mro_Map = Waze.map;

        var state1Array = [];
        var region = '';
        for(let i=0;i<raid_mapLayer.features.length;i++){
            var raidMapCenter = mro_Map.getCenter();
            var raidCenterPoint = new OpenLayers.Geometry.Point(raidMapCenter.lon,raidMapCenter.lat);
            var raidCenterCheck = raid_mapLayer.features[i].geometry.components[0].containsPoint(raidCenterPoint);

            if(raidCenterCheck === true){
                state1Array.push(raid_mapLayer.features[i].attributes.state1);
                if (!region.length) region = raid_mapLayer.features[i].attributes.state2;
            }
        }
        var label = state1Array.length ? state1Array.join(', ') + ', ' + region : '';
    }

    var _layerVisibleSetting = 'israel-mapraid-2018-visible';
    function loadLayerVisible() {
        var vis = localStorage.getItem(_layerVisibleSetting);
        return vis === null || vis === 'true';
    }
    function saveLayerVisible(value) {
        localStorage.setItem(_layerVisibleSetting, value);
    }
    function onLayerCheckboxChanged(value) {
        saveLayerVisible(value);
        _raid_mapLayer.setVisibility(value);
    }

    function InitMapRaidOverlay(){
        var mro_Map = Waze.map;
        var mro_OL = OpenLayers;
        var visible = loadLayerVisible();

        _raid_mapLayer = new mro_OL.Layer.Vector('Israel 2018 MapRaid', {
            displayInLayerSwitcher: true,
            uniqueName: "_israelMapRaid2018"
        });

        mro_Map.addLayer(_raid_mapLayer);
        _raid_mapLayer.setZIndex(100);
        _raid_mapLayer.setVisibility(visible);
        W.map.events.register("moveend",null,() => CurrentRaidLocation(_raid_mapLayer));

        a1.forEach(state => {
            AddRaidPolygon(_raid_mapLayer, state.coords, '', '');
        });

        CurrentRaidLocation(_raid_mapLayer);

        WazeWrap.Interface.AddLayerCheckbox('Display', 'mMR West Bank', visible, onLayerCheckboxChanged);
    }

    var a1 = [{"coords":[{"lon": "35.52011","lat": "32.4210"},
                         {"lon": "35.22413","lat": "32.55095"},
                         {"lon": "34.93360","lat": "31.34581"},
                         {"lon": "35.38794","lat": "31.34587"},
                         {"lon": "35.52011","lat": "32.42103"}
                        ]
              }];
    })();