WME Iceland Overlay

Creates polygons on the map of Iceland with info for editors

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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();