WME Iceland Overlay

Creates polygons on the map of Iceland with info for editors

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name                WME Iceland Overlay
// @namespace           https://greasyfork.org/it/scripts/10040-wme-iceland-overlay
// @description         Creates polygons on the map of Iceland with info for editors
// @include             https://www.waze.com/editor/*
// @include             https://www.waze.com/*/editor/*
// @include             https://editor-beta.waze.com/*
// @version             0.14
// @grant               none
// @license             http://creativecommons.org/licenses/by-nc-sa/3.0/
// @copyright           2015-2016 tbk0
// ==/UserScript==


function IcelandDrawLayers(raid_mapLayer)
{
//START_AUTOMATIC_SCRIPT




var layer1Points = [{lon:'-14.8122',lat:'65.7400'},{lon:'-14.9122',lat:'65.7400'},{lon:'-14.9122',lat:'65.7900'},{lon:'-14.8122',lat:'65.7900'}];
var layer2Points = [{lon:'-15.1200',lat:'65.6160'},{lon:'-15.0200',lat:'65.6160'},{lon:'-15.0200',lat:'65.6660'},{lon:'-15.1200',lat:'65.6660'}];
var layer3Points = [{lon:'-18.2450',lat:'65.7610'},{lon:'-18.1450',lat:'65.7610'},{lon:'-18.1450',lat:'65.8610'},{lon:'-18.2450',lat:'65.8610'}];
var layer4Points = [{lon:'-23.0000',lat:'65.5600'},{lon:'-22.7500',lat:'65.5600'},{lon:'-22.7500',lat:'65.6200'},{lon:'-23.0000',lat:'65.6200'}];
var layer5Points = [{lon:'-21.7500',lat:'65.7100'},{lon:'-21.5500',lat:'65.7100'},{lon:'-21.5500',lat:'65.8100'},{lon:'-21.7500',lat:'65.8100'}];
var layer6Points = [{lon:'-20.8110',lat:'65.6260'},{lon:'-20.9610',lat:'65.6260'},{lon:'-20.9610',lat:'65.5260'},{lon:'-20.8110',lat:'65.5260'}];
var layer7Points = [{lon:'-21.6040',lat:'64.9790'},{lon:'-21.5040',lat:'64.9790'},{lon:'-21.5040',lat:'65.0290'},{lon:'-21.6040',lat:'65.0290'}];
var layer8Points = [{lon:'-21.6940',lat:'65.1500'},{lon:'-21.5940',lat:'65.1500'},{lon:'-21.5940',lat:'64.9800'},{lon:'-21.6940',lat:'64.9800'}];
var layer9Points = [{lon:'-22.1790',lat:'65.2000'},{lon:'-22.0000',lat:'65.2000'},{lon:'-22.0000',lat:'65.1000'},{lon:'-22.1790',lat:'65.1000'}];
var layer10Points = [{lon:'-22.0000',lat:'65.4250'},{lon:'-21.8000',lat:'65.4250'},{lon:'-21.8000',lat:'65.3250'},{lon:'-22.0000',lat:'65.3250'}];
var layer11Points = [{lon:'-18.0700',lat:'65.6910'},{lon:'-17.9000',lat:'65.7200'},{lon:'-17.9000',lat:'65.7300'},{lon:'-18.0700',lat:'65.7010'}];
var layer12Points = [{lon:'-17.6750',lat:'63.6800'},{lon:'-17.6750',lat:'64.0200'},{lon:'-17.5450',lat:'64.0200'},{lon:'-17.5450',lat:'63.6800'}];
var layer13Points = [{lon:'-16.9760',lat:'63.8610'},{lon:'-16.9760',lat:'64.0970'},{lon:'-16.8750',lat:'64.0970'},{lon:'-16.8750',lat:'63.8610'}];
var layer14Points = [{lon:'-15.4410',lat:'64.2940'},{lon:'-15.4860',lat:'64.3100'},{lon:'-15.4860',lat:'64.4000'},{lon:'-15.2470',lat:'64.4000'},{lon:'-15.2460',lat:'64.3620'},{lon:'-15.3500',lat:'64.3630'},{lon:'-15.3520',lat:'64.3380'},{lon:'-15.3840',lat:'64.3370'},{lon:'-15.3840',lat:'64.3040'},{lon:'-15.3950',lat:'64.3030'},{lon:'-15.3940',lat:'64.2650'},{lon:'-15.4170',lat:'64.2650'},{lon:'-15.4220',lat:'64.2740'},{lon:'-15.4280',lat:'64.2740'}];
var layer15Points = [{lon:'-14.7730',lat:'64.3580'},{lon:'-14.7720',lat:'64.4390'},{lon:'-14.7690',lat:'64.5930'},{lon:'-14.9940',lat:'64.5870'},{lon:'-14.9960',lat:'64.9390'},{lon:'-15.1550',lat:'64.9340'},{lon:'-14.6820',lat:'65.0950'},{lon:'-14.5780',lat:'65.1000'},{lon:'-14.5760',lat:'64.9960'},{lon:'-14.6790',lat:'64.9900'},{lon:'-14.6790',lat:'64.9510'},{lon:'-14.6370',lat:'64.9480'},{lon:'-14.2890',lat:'64.9410'},{lon:'-14.0490',lat:'65.0386'},{lon:'-13.6870',lat:'64.9300'},{lon:'-14.0790',lat:'64.9210'},{lon:'-14.0810',lat:'64.8610'},{lon:'-14.0820',lat:'64.7640'},{lon:'-14.0780',lat:'64.7320'},{lon:'-14.1100',lat:'64.7070'},{lon:'-14.1100',lat:'64.6160'},{lon:'-14.4620',lat:'64.3940'}];
var layer16Points = [{lon:'-14.4670',lat:'65.1860'},{lon:'-14.3870',lat:'65.1560'},{lon:'-14.4980',lat:'65.1200'},{lon:'-14.5470',lat:'65.1610'}];
var layer17Points = [{lon:'-14.0480',lat:'65.0386'},{lon:'-13.9280',lat:'65.1100'},{lon:'-13.6980',lat:'65.1140'},{lon:'-13.6960',lat:'65.2150'},{lon:'-13.6890',lat:'65.2260'},{lon:'-13.6960',lat:'65.2810'},{lon:'-13.5540',lat:'65.2740'},{lon:'-13.4440',lat:'65.0900'},{lon:'-13.6870',lat:'64.9310'}];
var layer18Points = [{lon:'-21.1100',lat:'65.2660'},{lon:'-21.0910',lat:'65.2660'},{lon:'-21.0870',lat:'65.2700'},{lon:'-21.0830',lat:'65.2760'},{lon:'-21.0480',lat:'65.2850'},{lon:'-20.9920',lat:'65.2980'},{lon:'-20.9950',lat:'65.3240'},{lon:'-21.2060',lat:'65.3160'},{lon:'-21.1450',lat:'65.2430'},{lon:'-21.1360',lat:'65.2420'}];
var layer19Points = [{lon:'-19.6510',lat:'63.9830'},{lon:'-19.6510',lat:'64.7180'},{lon:'-19.0545',lat:'64.8711'},{lon:'-19.0517',lat:'64.3367'},{lon:'-18.8417',lat:'64.3394'},{lon:'-18.8440',lat:'64.1690'},{lon:'-19.4270',lat:'64.0460'},{lon:'-19.4240',lat:'63.9130'}];
var layer20Points = [{lon:'-15.9212',lat:'65.3063'},{lon:'-15.4887',lat:'65.1100'},{lon:'-15.5163',lat:'65.1056'},{lon:'-15.5737',lat:'65.0870'},{lon:'-15.6071',lat:'65.0220'},{lon:'-15.6775',lat:'65.0057'},{lon:'-15.6960',lat:'65.0147'},{lon:'-15.7218',lat:'65.0180'},{lon:'-15.7510',lat:'65.0046'},{lon:'-15.7739',lat:'64.9449'},{lon:'-15.7847',lat:'64.9395'},{lon:'-15.8148',lat:'64.9081'},{lon:'-15.8968',lat:'64.8714'},{lon:'-16.2677',lat:'64.9732'},{lon:'-16.2685',lat:'65.0258'},{lon:'-16.5331',lat:'65.0320'},{lon:'-16.5367',lat:'65.3074'},{lon:'-16.3336',lat:'65.3091'}];
var layer21Points = [{lon:'-15.6856',lat:'65.4673'},{lon:'-14.6922',lat:'65.7633'},{lon:'-14.6820',lat:'65.0950'},{lon:'-14.8874',lat:'65.0253'},{lon:'-15.0502',lat:'65.0173'},{lon:'-15.6778',lat:'65.4377'}];
var layer22Points = [{lon:'-18.6348',lat:'64.1709'},{lon:'-18.6320',lat:'64.5861'},{lon:'-18.6346',lat:'64.8764'},{lon:'-18.0751',lat:'64.7261'}];

AddRaidPolygon(raid_mapLayer,layer1Points,"#FFFF00",1,'New roads: 2014');
AddRaidPolygon(raid_mapLayer,layer2Points,"#FFFF00",2,'New roads: 2014');
AddRaidPolygon(raid_mapLayer,layer3Points,"#00FF00",3,'Area shifted: +80 / +40');
AddRaidPolygon(raid_mapLayer,layer4Points,"#FFFF00",4,'New roads: 2015');
AddRaidPolygon(raid_mapLayer,layer5Points,"#00FF00",5,'Area shifted: +140 / +110');
AddRaidPolygon(raid_mapLayer,layer6Points,"#00FF00",6,'Area shifted: +110 / +130');
AddRaidPolygon(raid_mapLayer,layer7Points,"#00FF00",7,'Area shifted: +140 / +130');
AddRaidPolygon(raid_mapLayer,layer8Points,"#008000",8,'Area shifted: +130 / +120 - provisional');
AddRaidPolygon(raid_mapLayer,layer9Points,"#00FF00",9,'Area Shifted: +140 / +110');
AddRaidPolygon(raid_mapLayer,layer10Points,"#00FF00",10,'Area Shifted: +140 / +110');
AddRaidPolygon(raid_mapLayer,layer11Points,"#FFFF00",11,'New roads: 2017 Tunnel Akureyri Húsavik');
AddRaidPolygon(raid_mapLayer,layer12Points,"#00FF00",12,'Area shifted: +80 / +30');
AddRaidPolygon(raid_mapLayer,layer13Points,"#00FF00",13,'Area shifted: +80 / +60');
AddRaidPolygon(raid_mapLayer,layer14Points,"#00FF00",14,'Area shifted: +70 / +110');
AddRaidPolygon(raid_mapLayer,layer15Points,"#FF0000",15,'Area shifted: +70 / +100 overlapping');
AddRaidPolygon(raid_mapLayer,layer16Points,"#00FF00",16,'Area shifted: +60 / +20');
AddRaidPolygon(raid_mapLayer,layer17Points,"#00FF00",17,'Area shifted: +70 / -20');
AddRaidPolygon(raid_mapLayer,layer18Points,"#FF0000",18,'Area shifted: +170 / +130 overlapping');
AddRaidPolygon(raid_mapLayer,layer19Points,"#00FF00",19,'Area shifted: +160 / +80');
AddRaidPolygon(raid_mapLayer,layer20Points,"#00FF00",20,'Area shifted: +110 / +70');
AddRaidPolygon(raid_mapLayer,layer21Points,"#00FF00",21,'Area shifted: +120 / +40');
AddRaidPolygon(raid_mapLayer,layer22Points,"#00FF00",22,'Area shifted: +90 / +80');



//END_AUTOMATIC_SCRIPT
}


function bootstrap_IcelandOverlay()
{
   var bGreasemonkeyServiceDefined = false;

   try
   {
      bGreasemonkeyServiceDefined = (typeof Components.interfaces.gmIGreasemonkeyService === "object");
   }
   catch (err) { /* Ignore */ }

   if (typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined)
   {
      unsafeWindow = ( function () {
         var dummyElem = document.createElement('p');
         dummyElem.setAttribute('onclick', 'return window;');
         return dummyElem.onclick();
      }) ();
   }

    /* begin running the code! */
    setTimeout(InitMapRaidOverlay, 1000);
}


function AddRaidPolygon(raidLayer,groupPoints,groupColor,groupNumber,groupComment)
{
    var mro_Map = unsafeWindow.Waze.map;
    var mro_OL = unsafeWindow.OpenLayers;
    var groupName = 'Layer' + groupNumber;
    var pointLabel;

    var style = 
    {
        strokeColor: groupColor,
        strokeOpacity: 0.8,
        strokeWidth: 3,
        fillColor: groupColor,
        fillOpacity: 0.15,
        label: groupComment,
        labelOutlineColor: "black",
        labelOutlineWidth: 3,
        fontSize: 14,
        fontColor: groupColor,
        fontOpacity: 0.85,
        fontWeight: "bold"
    };

    var attributes = 
    {
        name: groupName,
        number: groupNumber
    };

    var pnt= [];
    for(i=0;i<groupPoints.length;i++)
    {
       convPoint = new OpenLayers.Geometry.Point(groupPoints[i].lon,groupPoints[i].lat).transform(new OpenLayers.Projection("EPSG:4326"), mro_Map.getProjectionObject());
       //console.log('MapRaid: ' + JSON.stringify(groupPoints[i]) + ', ' + groupPoints[i].lon + ', ' + groupPoints[i].lat);
       pnt.push(convPoint);
       if ( groupComment.substring(0,12) === "Area shifted" )
       {
           pointLabel = '' + groupNumber + ' (' + (i+1) + ')' + groupComment.substring(12);
       }
       else
       {
           pointLabel = '' + (i+1);
       };
       AddRaidString(raidLayer,convPoint,groupColor,groupNumber,i,pointLabel);
   }

    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 AddRaidString(raidLayer,convPoint,groupColor,groupNumber,pointNumber,pointLabel)
{
    var mro_Map = unsafeWindow.Waze.map;
    var mro_OL = unsafeWindow.OpenLayers;
    var groupName = 'Layer' + groupNumber;

    var style = 
    {
        strokeColor: groupColor,
        strokeOpacity: 0.8,
        strokeWidth: 3,
        fillColor: groupColor,
        fillOpacity: 0.15,
        label: pointLabel,
        labelOutlineColor: "black",
        labelOutlineWidth: 3,
        fontSize: 14,
        fontColor: groupColor,
        fontOpacity: 0.85,
        fontWeight: "bold"
    };

    var attributes =
    {
        name: groupName,
        number: groupNumber * 1000 + pointNumber + 1
    };

    var pnt= [];
    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 = unsafeWindow.Waze.map;

    for(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);
        //console.log('MapRaid: ' + raid_mapLayer.features[i].attributes.number + ': ' + raidCenterCheck);
        if(raidCenterCheck === true)
        {
            var raidLocationLabel = 'Layer ' + raid_mapLayer.features[i].attributes.number + ' - ' + $('.WazeControlLocationInfo').text();
    		    setTimeout(function(){$('.WazeControlLocationInfo').text(raidLocationLabel)},200);
        }
    }
}


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

    //create overlay layer and add to WME map
    var mro_mapLayers = mro_Map.getLayersBy("uniqueName","__MapRaidGroups");
    var raid_mapLayer = new mro_OL.Layer.Vector("WME Iceland Overlay", {
        displayInLayerSwitcher: true,
        uniqueName: "__MapRaidGroups"
    });
    I18n.translations.en.layers.name["__MapRaidGroups"] = "WME Iceland Overlay";
    mro_Map.addLayer(raid_mapLayer);
    raid_mapLayer.setVisibility(true);

//--------------------------------------------------------------------------------------------------------------------------------------------------------------
   IcelandDrawLayers(raid_mapLayer);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------

    //obtains current map center location to determine which group label to apply
    setTimeout(function(){CurrentRaidLocation(raid_mapLayer)},3000);
    mro_Map.events.register("moveend", Waze.map, function(){CurrentRaidLocation(raid_mapLayer)});
    mro_Map.events.register("zoomend", Waze.map, function(){CurrentRaidLocation(raid_mapLayer)});
}

bootstrap_IcelandOverlay();