🏠 Home 

WME LV Speedcams

Overlay speedcams for Latvia


ติดตั้งสคริปต์นี้?
สคริปต์ที่แนะนำของผู้เขียน

คุณอาจชื่นชอบ WME Geometries


ติดตั้งสคริปต์นี้
// ==UserScript==
// @name                WME LV Speedcams
// @author              someone, madnut
// @description         Overlay speedcams for Latvia
// @include             https://*waze.com/*editor*
// @exclude             https://*waze.com/*user/editor*
// @version             0.3.1
// @grant               GM_xmlhttpRequest
// @connect             google.com
// @require             https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
// @namespace           waze-ua
// ==/UserScript==
var divLMAO;
var SCLV_Layer;
function bootstrapSCLV() {
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();
})();
}
setTimeout(initializeSCLV, 999);
}
function checkLayerNum() {
var lvolLayer = null;
for (var i = 0; i < W.map.layers.length; i++) {
if (W.map.layers[i].uniqueName == '__speedcamlv')
lvolLayer = i;
}
return lvolLayer;
}
function getSpeedcamLV() {
SCLV_Layer.destroyFeatures();
//var url_kmz = "http://www.google.com/maps/d/u/0/kml?mid=1DbGaups3ELitC9XYVVouGAZk3ps&lid=zqWgRc-lhNx4.khyZvhofiPWI";
var url_kml = "https://www.google.com/maps/d/u/0/kml?mid=1DbGaups3ELitC9XYVVouGAZk3ps&forcekml=1";
GM_xmlhttpRequest({
url: url_kml,
method: 'GET',
timeout: 10000,
onload: function (res) {
var parser = new OL.Format.KML({
extractStyles: true,
extractAttributes: true
});
parser.internalProjection = W.map.getProjectionObject();
parser.externalProjection = new OL.Projection("EPSG:4326");
var features = parser.read(res.responseText);
// TODO: customize features before adding
SCLV_Layer.addFeatures(features);
},
onreadystatechange: function (res) {
// loading
},
ontimeout: function (res) {
alert("Request timeout!");
},
onerror: function (res) {
alert("Request error!");
}
});
}
function addImage(name, dscr, color, speed, lat, lon) {
var coords = OL.Layer.SphericalMercator.forwardMercator(lon, lat);
var point = new OL.Geometry.Point(coords.lon, coords.lat);
var px = W.map.getPixelFromLonLat(new OL.LonLat(coords.lon, coords.lat));
var imgRoot = '/assets';
var attributes = {
name: name,
description: dscr,
speed: speed,
pixel: px
};
var icon;
if (color.indexOf("green") > -1) {
icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAPGSURBVHjarJZdaFtlGMf/52RJ87lmnSVja0BcsguF1lhJwW6B1dSkUDsI6ZpjapHRL84pSak91i61rWeHFBO8KIT0lCZNrtogsgsFkW164a13omidV8Iu9UbY5pg+XtQUupzTbm928bs4Fy//3/s+7/M+B0QEPSqVCqrVKjRNw/LyMmZmZiAIgqWnp+ea2+2+BWAPwG8A9lpbW7/p7u6eGh0dtYqiiEwmg42NDVSrVVQqFRhlEBFwnMDm5iZUVcXg4KBgOee6D44jAITTIJwH4QXsf3Mgyxnng2g0ek1RFGia9nwEqtUquqIXP+f4/4PVEKE80sgnbxJaQOA4evly8Kv6+qYEarUagkPhmwAIMad+8JMk2wkABSKXvt7d3WUX2NragiRJ74LnCMOtTxde572zBIDGx8elUqnEJpDL5WB98dRDAM8WXuckqOWs6++1tTUrk8DQ0JB0ZM2P49MIAaBIJHKdSaC9vf0O8+7rAOR2u79jEgDwCyxNCuy36B6rwF14mhTwgQDcZRX4qekSuEAAfmYS8Hq9Xz6PO+DxeG4zCSQSiXc4niPIXWzhH/cSAIrFYiKTgKqqcJ/z3GM+BYBsF07fVxSF7SEqlUpYWlq6bLKeIASfUaIPxJl5kmX57XK53NwsSCaTH3AmjvDWU0rEnASOo3g8fqNWqzU3jOoS8Xg8D4Ag+o4O//A1AkDBK+Gb9UHU1DCqs7Ozgws9Xd8DIJSuHll37yv+X2u1Gra3t1Eul8FcgmKxeICmadA0zWI543oEh0EpukHmU7Z/8vm8t1gsolAoHMAkkM/nD7G+vg5BEN4HQLhx6XB46SoBoL6+vu1CodCwlklgdXW1gWw2C+v5tg###+IiyOSyPFYU5WQ2m4WqqodgfgeeJJfLIRaLLQAgaLFDtQ8EAl/kcjkoitIAk8DCwoIusizbeYf5Ma7Y9sOvv06ciad0Ov2G3u6ZT2Bubk6XxcVFtL/UsXfwQgZALS77XysrK8hkMrowCYiiqEsqlUIoFProQAAgv99/S5ZlpFIpXZgEpqendRFFEclk8lX+BE+Y76z/donpdBqSJOnCJDAyMmJIIpGAqcX8CADxPP/v2NiYXxRFQ2kmgeHhYUMEQYDNZvsTAJnN5odTU1OYnJw0hEmgv7/fkIGBATidzt8BkN1u/yORSCAejxvCJBAOhw2JRqNoa2v7EQA5HI57oVAIvb29hjAJTExMGCJJEnw+37cAqKOj44fZ2VnDrhFFkU0gnU4bIssygsHgJgDq7Oz8bH5+3rAFj2vD/wYAevF106CHVtEAAAAASUVORK5CYII=";
} else {
icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAQXSURBVHjarNZdSFtnHMfx30lOjBrf6wvzZRNmqV1L0NpGUMjaYjAyKxi0nkyXOpnGnrhEMkOwceoOIY6EjcmCHjExGQONY+xiG2wXbmMvjMEGpSKzsx0bY+ugY91FBxus+t+FRLDmzPbJLr6Xh//nPE+e8wREhFTFYjHE43HIsozJyUmMjIzAarVmNDY2DhQXF6zxvGpLrea+53lu68iR/E8aGhrsfX19maIowufzYX5+HvF4HLFYDEoziAg4DLCwsAC/34/29nZr/Zn8eyoVR5VHQc8/B/K5Qc5BUHUtiONAJ+ry7pnN5gFJkiDL8v8DiMfjEL36dZ7n6GIn6Mb6o/Tnb40H+nHzceq3glQqjvovn/g2+XxagEQiAfdk/QYAWo0j5eD7e3cVBIAGXPrNlZUVdsDi4iIcDsczajVHb7/5YMOTffDO7paIYv9oJBJhAwSDQRia8rcvdj7c8GSX+0En63K3Z2ZmMpkAHR0dDkB5zw/r5xvHCAC1trZeYQKUlJSslVazvX2y43pQSXHhF0wAnue+uySkB3AOgnie22IF3By1pweYeAHE89xNVsAm6w8w2fAlEM9z15kAVVVV76kL0wOUVoMqKso+YgIIgvA0z3P0zef5TMOvX60gjgNZLBaRCeD3+1GrL7lzysC2CufOg548X7gtSRLbhygSiWBiYuKcLpenV/wPh1h4DZSZpSKPx3MhGo2mdxc82y9c0WSoKBp+MMRqHKRSc2QVOmcSiUR6l1ESYRU6XwVAn37I/+fwq18WEQByT9ZvJC+itC6jZMvLy3jKcuwHAHT3tkERoCoANZ197NdEIoGlpSVEo1Ewb8Hc3NxesixDluWM4ydzduy21FsRfAn0SIWWQqFQ1dzcHMLh8F5MgFAotK/Z2VnYbN1eALR1rWrf8Lu3DQSATKazb4TD4QPPMgGmp6cPFAgE0GQs2L7/jng9CCor1+5IkpQXCATg9/v3xfwduL9gMAiLxeIFQH/cOrUHgA50+nTd+8FgEJIkHYgJ4PV6U+bxeLKLy7Q7y9HdVbj2VTFpMlTkcrmaUr098wq43e6UjY+P40xz+a0W0y7g5SlQabnur6mpKfh8vpQxAURRTJnT6YTRaHwR2AU8UQeqra1Z83g8cDqdKWMCDA8Pp0wURfT29tZptSr6+rO85N8u0eVyweFwpIwJ0NPTo5ggCMjN1/4DgHiNasdmsx0VRVERzQTo7u5WzGq1Iisr6w4A0mg0f9vtdgwNDSnGBDCZTIq1tbUhJyfnJwCUnZ39uyAI6OrqUowJ0NLSopjZbEZRUdEGANLpdL8YjUY0NzcrxgQYHBxUzOFwoKam5mMAVFlZuT46Oqp4akRRZAO4XC7FPB4PDAbDAgDS6/VvjY2NKR7Bw47hvwMAZ66H8FWoXBEAAAAASUVORK5CYII=';
}
var style = {
externalGraphic: icon,
graphicWidth: 32,
graphicHeight: 32,
fillOpacity: 1,
title: 'SpeedCam',
cursor: 'help'
};
var imageFeature = new OL.Feature.Vector(point, attributes, style);
SCLV_Layer.addFeatures([imageFeature]);
//console.log('WME SCLV: Added SpeedCam at ' + lat + ',' + lon + '('+ px +')');
}
function initializeSCLV() {
//console.log("WME SCLV: Initializing");
var lvolVisibility = true;
SCLV_Layer = new OL.Layer.Vector("LV Speedcams", {
rendererOptions: {
zIndexing: true
},
uniqueName: '__speedcamlv'
});
I18n.translations[I18n.locale].layers.name["__speedcamlv"] = "LV Speedcams";
// restore saved settings
if (localStorage.WME_LV_Speedcam) {
//console.log("WME SCLV: loading options");
var options = JSON.parse(localStorage.getItem("WME_LV_Speedcam"));
lvolVisibility = options[0];
}
// overload the WME exit function
var saveSCLVOptions = function () {
if (localStorage) {
//console.log("WME SCLV: saving options");
var options = [];
lvolVisibility = SCLV_Layer.visibility;
options[0] = lvolVisibility;
localStorage.setItem("WME_LV_Speedcam", JSON.stringify(options));
}
};
window.addEventListener("beforeunload", saveSCLVOptions, false);
function showSpeedCamPopup(f, pos) {
//shift popup if SC panel is visible
try {
var scX = pos.x + 200;
var scY = pos.y - 100;
//console.log('WME SCLV: shift popup ('+scX+','+scY+')');
divLMAO.style.top = scY + 'px';
divLMAO.style.left = scX + 'px';
} catch (e) {
//console.log('WME SCLV: Could not shift popup');
}
var attributes = f.attributes;
var scDescription = (attributes.description ? attributes.description : "");
var scName = (attributes.name ? attributes.name : "");
//var scSpeed = (attributes.speed ? attributes.speed : "");
var reportDetail = "<b>NAME: </b>" + scName
+ "<br><b>DESCRIPTION: </b>" + scDescription;
//   + "<br><b>SPEED: </b>" + scSpeed;
document.getElementById("divLMAO").innerHTML = reportDetail;
divLMAO.style.visibility = 'visible';
}
function hideSpeedCamPopup() {
divLMAO.style.visibility = 'hidden';
////console.log('WME SCLV: popup divLMAO X:'+divLMAO.style.left+' Y:'+divLMAO.style.top);
}
SCLV_Layer.setZIndex(9999);
W.map.addLayer(SCLV_Layer);
W.map.addControl(new OL.Control.DrawFeature(SCLV_Layer, OL.Handler.Path));
SCLV_Layer.setVisibility(lvolVisibility);
var divPopupCheck = document.getElementById('divLMAO');
if (divPopupCheck === null) {
divLMAO = document.createElement('div');
divLMAO.id = "divLMAO";
divLMAO.style.position = 'absolute';
divLMAO.style.visibility = 'hidden';
divLMAO.style.zIndex = 1000;
divLMAO.style.backgroundColor = '#FFFF80';
divLMAO.style.borderWidth = '2px';
divLMAO.style.borderStyle = 'solid';
divLMAO.style.borderRadius = '5px';
divLMAO.style.boxShadow = '5px 5px 5px rgba(50, 50, 50, 0.3)';
divLMAO.style.padding = '5px';
divLMAO.style.width = '700px';
document.body.appendChild(divLMAO);
//console.log('WME SCLV: Creating popup divLMAO');
}
//clear existing SCLV features
SCLV_Layer.destroyFeatures();
var lvolLayer = checkLayerNum();
W.map.events.register("mousemove", W.map, function (e) {
hideSpeedCamPopup();
var pos = this.events.getMousePosition(e);
var position = W.map.getLonLatFromPixel(pos);
////console.log('WME SCLV: coords xy = ' + position.x + ' ' + position.y);
var lvolLayer = checkLayerNum();
if (W.map.layers[lvolLayer]) {
//var scCount = W.map.layers[lvolLayer].features.length;
// //console.log('WME SCLV: Current Speedcam count = ' + scCount);
var scFeatures = W.map.layers[lvolLayer].features;
for (var j = 0; j < scFeatures.length; j++) {
var lvolLayerVisibility = SCLV_Layer.getVisibility();
var scX = scFeatures[j].geometry.x;
var scY = scFeatures[j].geometry.y;
if (lvolLayerVisibility === true && position.lon > scX - 20 && position.lon < scX + 20 && position.lat > scY - 30 && position.lat < scY + 30) {
//console.log('WME SCLV: hover over Speedcam ('+scX+','+scY+')');
showSpeedCamPopup(scFeatures[j], pos);
}
}
}
});
//refresh if user moves map
W.map.events.register("moveend", W.map, getSpeedcamLV);
window.setTimeout(getSpeedcamLV(), 500);
}
bootstrapSCLV();