您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Overlay cameras
// ==UserScript== // @name WME Cameras // @author J0N4S13 // @description Overlay cameras // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor.*$/ // @version 2023.01.30 // @grant none // @namespace https://greasyfork.org/users/218406 // ==/UserScript== getCamarasIP(); //getCamarasBrisa(); //getCamaraBrisa(); initializeCameras(); var Cameras_Layer; var camarasIP; var camarasBrisa; var camaraBrisa; function getCamarasIP(){ $.getJSON("https://external.wazept.com/cameras/getCamarasIP.php", function(data) { camarasIP = data.features; }); } function getCamaraBrisa(){ var settings = { "url": "https://external.wazept.com/cameras/getCamaraBrisa.php", "method": "GET", "timeout": 0, "headers": { "Cookie": "__cfduid=d9d39e1b66a6c549435973dd2c2f7cae11592957802" }, }; $.ajax(settings).done(function (response) { camaraBrisa = response }); } function getCamarasBrisa(){ $.getJSON("https://external.wazept.com/cameras/getCamarasBrisa.php", function(data) { camarasBrisa = data; }); } function checkLayerNum() { var lmaoLayer = null; for(var i = 0; i < W.map.layers.length; i++) { if(W.map.layers[i].uniqueName == '__cameras') lmaoLayer = i; } return lmaoLayer; } function getCameras(){ if (!Cameras_Layer.getVisibility()) { return; } Cameras_Layer.destroyFeatures(); $(camarasIP).each(function(){ var lat = this.geometry.y; var long = this.geometry.x; addImage("IP", lat, long, this); }); $(camarasBrisa).each(function(){ var lat = parseFloat(this.Latitude); var long = parseFloat(this.Longitude); addImage("BRISA", lat, long, this); }); } function addImage(type, lat, long, detail) { var coords = OL.Layer.SphericalMercator.forwardMercator(long, lat); var point = new OL.Geometry.Point(coords.lon,coords.lat); var alertPx = W.map.getPixelFromLonLat(new OL.LonLat(coords.lon,coords.lat)); var icon; var attributes; var style; if(type == "IP"){ icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAjdJREFUWIXtlj9oE3EUxz8vXomCIA5tVbAEKUQ4rQi6SbtIZyeHqpWODgo2V3BqjPMlRTs6iZBJZ8HJooODCEoPDFSoCm2poCCCtA33HK70zP1Pk1CEfpdf8n6/33ufd7+733sGeyxjH+C/BNDacEHdfEXgEoDCG2luzMq9pS89BVDbVABckH/sAqcw8pNqm56h5ORE0K4BqG2uAscyk1ZNV22+i+UMdAywk3X76lfbVLEcSVqUCJAa/O5HyOVabdUzIR9JELEAapvricEB5ka8sbQYChzwtSaWE3mEkQCqCFX6UwGyazBuIvoJVE23i8GB+KPo3UV04Sa8e5K6LASgteECu83/xjMYOO3/H5tpeTd0vjgktxtfkwH0wIPE7yaoKw+9sbSYulQ3jQowlQggrjFKGsHlWTh3NRvgeAVelj3fylhwuv13IEOmLfqZXB7CRyAsCEwC0HcY7ryFrT/w6CKcv549sCrUzgZNr1IBJLdRxs17AFu/PWPfoeyZPx6HXyuRU3KweT8dYHppeaeqAbiuf90uv4YjJ+FooXVT/RqsfkhlC34BkQAhzY342T+/5Y0TdXj/FD69SN2epmiAkpML3YY/Pvu/6xNtB4orSJEAIqjarANePU8oNBm1FjcRewRiOYMd9AJBX8fbBtjeKJ1CdNSQ+BDFFTBis4hRd1oyD6JxAtpoz7rdlPog3uPU+eKQbhoVUUYBVFkQaZbFanwDwMruc1f9wPaFMpW6sFcA3dQ+wF9JaLei/FXMqwAAAABJRU5ErkJggg=='; attributes = { type: type, url: detail.attributes.url1, pixel: alertPx }; style = { externalGraphic: icon, graphicWidth: 32, graphicHeight: 32, title: 'IP', cursor: 'help' }; } else if(type == "BRISA"){ icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAqCAYAAADWFImvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALWSURBVFhHvZg7aBRRFIYTn1tZLaRIaWGxrYWIjYWCYOwFW0FrC/sU2lirhYVYCqbRxSpFrILGImBhIIoIPmALUSGCKOv9JvuPZ+6c3bmzO7MXPu7sfcz59tyzk90shLZYweGG8WJAfuFtmhe5SDbQ6S51Lj7dXF159vLzpeevh21CDGIRcxT/vxkT3qY2IWZBBLN5ZCKGmKOs7EuE/pi3sG1W+q9+EntBEoGut7CK1a13Q9rujz13vorGRG5u7mQiG1++ufNVjES6gX2JwLK3sIqGRJaTRe5sf8gg8OX17Xy8cZHFg4eOewsJ2v84GD58+ymrB3qC2rFZRYhdKaLgXNMrI3B1400usjX4XtqbQiyyPCkjj99/HQ5+/c4C0rgmA0ggwzVrvP1VJIuIvT9/MwEdjcToyQYiSHl7J1FLhHdOQIlwPEBwpHiGqEmKee9eMbVE9O5pZIbACFCwOh4ro8YYa/i0qa7ieyeLEGRS09EgWNW8LCWLcBRNNDI4U0bssUzbJn20k0W8s6/T2E8dqU6oGbKj+yeLcINps8I+6kL7kVDT/ZNFBEVLvZDm1Mab0HqKWfVmH361RSykmCCkeNynhWC20Fmr1/bBN5OIBSlqgMCqJ47CzukPJOOI2/2NicToAeeN02yhQmsi40AOCYTsuCty4cmLHbtoHsQi2feR07fvX/cWt4krEvreuUf9NW9DW5REAnxv7AVOnrp19968fmy5IspK4AwcOHL0/Ikr124gdvbB2nobcrmI/V1jRAoyMVZu1gJ3RQI2K9kxBTIh4YnBtHL2aPLfvgFPRkIlKeGJQYpcSSSWARY4UlZsajmJFUQgkpFQSWqMWLKcfc2joiQiJgjlUmIGOY31yEzouV/5f2iSiYQ8sWnkCvA0D31BpCAjrFQNuYKglfMYrS+IWEpSIlEuFszFIjTvSozDFYNEOSsmNOcGrIMrBgliGZ3uUucfRGYIamB8WSUAAAAASUVORK5CYII='; attributes = { type: type, idCamera: detail.idCamara, pixel: alertPx }; style = { externalGraphic: icon, graphicWidth: 32, graphicHeight: 32, title: 'Brisa', cursor: 'help' }; } var imageFeature = new OL.Feature.Vector(point, attributes, style); Cameras_Layer.addFeatures([imageFeature]); } function initializeCameras(e) { if (e && e.user === null) { return; } if (typeof W === "undefined" || typeof W.loginManager === "undefined" || typeof W.map === 'undefined' || typeof OL === 'undefined' || document.querySelector('.list-unstyled.togglers .group') === null) { setTimeout(initializeCameras, 100); return; } if (!W.loginManager.user) { W.loginManager.events.register("login", null, initializeCameras); W.loginManager.events.register("loginStatus", null, initializeCameras); if (!W.loginManager.user) { return; } } function showAlertPopup(f){ divCameras.style.top = '175px'; divCameras.style.left = '375px'; var attributes = f.attributes; var reportDetail; if(attributes.type == "IP"){ reportDetail = '<video width="320" height="240" autoplay controls><source src="' + attributes.url + '" type="video/mp4"></video>' } else if(attributes.type == "BRISA"){ reportDetail = '<img src="data:image/png;base64, ' + camaraBrisa + '" />' } document.getElementById("divCameras").innerHTML = reportDetail; divCameras.style.visibility = 'visible'; } function hideAlertPopup(){ divCameras.style.visibility = 'hidden'; divCameras.style.top = '175px'; divCameras.style.left = '375px'; } function saveLMAOOptions() { if (localStorage) { var options = []; camerasVisibility = document.getElementById("layer-switcher-item_cameras").checked; options[0] = camerasVisibility; localStorage.setItem("WMECameras", JSON.stringify(options)); } } function registerKeyShortcut(actionName, callback, keyName) { I18n.translations[I18n.locale].keyboard_shortcuts.groups['default'].members[keyName] = actionName; W.accelerators.addAction(keyName, {group: 'default'}); W.accelerators.events.register(keyName, null, callback); W.accelerators._registerShortcuts({[""]: keyName}); } var camerasVisibility = true; Cameras_Layer = new OL.Layer.Vector("Cameras",{ rendererOptions: { zIndexing: true }, uniqueName: '__cameras' } ); if (localStorage.WMECameras) { var options = JSON.parse(localStorage.getItem("WMECameras")); camerasVisibility = options[0]; } window.addEventListener("beforeunload", saveLMAOOptions, false); var otherGroupSelector = document.getElementById('layer-switcher-group_display'); if (otherGroupSelector !== null) { var otherGroup = otherGroupSelector.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("UL")[0]; var toggler = document.createElement('li'); var togglerContainer = document.createElement('div'); togglerContainer.className = 'wz-checkbox'; var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.id = 'layer-switcher-item_cameras'; checkbox.className = 'toggle'; checkbox.checked = Cameras_Layer.getVisibility(); checkbox.addEventListener('click', function(e) { Cameras_Layer.setVisibility(e.target.checked); }); otherGroupSelector.addEventListener('click', function(e) { Cameras_Layer.setVisibility(e.target.checked & checkbox.checked); checkbox.disabled = !e.target.checked; }); togglerContainer.appendChild(checkbox); var label = document.createElement('label'); label.htmlFor = checkbox.id; var labelText = document.createElement('span'); labelText.className = 'label-text'; labelText.appendChild(document.createTextNode("Cameras")); label.appendChild(labelText); togglerContainer.appendChild(label); toggler.appendChild(togglerContainer); otherGroup.appendChild(toggler); } W.map.addControl(new OL.Control.DrawFeature(Cameras_Layer, OL.Handler.Path)); W.map.addLayer(Cameras_Layer); Cameras_Layer.setVisibility(camerasVisibility); getCameras(); var divPopupCheck = document.getElementById('divCameras'); if (divPopupCheck === null){ var divCameras = document.createElement('div'); divCameras.id = "divCameras"; divCameras.style.position = 'absolute'; divCameras.style.visibility = 'hidden'; divCameras.style.top = '175px'; divCameras.style.left = '375px'; divCameras.style.zIndex = 1000; divCameras.style.backgroundColor = 'aliceblue'; divCameras.style.borderWidth = '3px'; divCameras.style.borderStyle = 'ridge'; divCameras.style.borderRadius = '10px'; divCameras.style.boxShadow = '5px 5px 10px Silver'; divCameras.style.padding = '4px'; document.body.appendChild(divCameras); } W.map.events.register("mousemove", W.map, function(e) { hideAlertPopup(); var position = this.events.getMousePosition(e); var lmaoLayer = checkLayerNum(); if(W.map.layers[lmaoLayer].features.length > 0){ var alertFeatures = W.map.layers[lmaoLayer]; for(var j = 0; j < W.map.layers[lmaoLayer].features.length; j++){ var alertX = alertFeatures.features[j].attributes.pixel.x; var alertY = alertFeatures.features[j].attributes.pixel.y; if(Cameras_Layer.getVisibility() === true && position.x > alertX - 10 && position.x < alertX + 10 && position.y > alertY - 10 && position.y < alertY + 20){ showAlertPopup(alertFeatures.features[j]); } } } }); W.map.events.register("zoomend", null, getCameras); W.map.events.register("moveend", null, getCameras); }