您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows road closures from Waze Live map in WME
当前为
// ==UserScript== // @name WME LiveMap closures // @description Shows road closures from Waze Live map in WME // @include https://www.waze.com/editor* // @include https://www.waze.com/*/editor* // @include https://beta.waze.com/* // @exclude https://www.waze.com/*user/editor* // @version 1.13 // @grant none // @copyright 2014-2018, pvo11 // @namespace https://gf.qytechs.cn/scripts/5144-wme-road-closures // ==/UserScript== var epsg900913 = new OpenLayers.Projection("EPSG:900913"); var epsg4326 = new OpenLayers.Projection("EPSG:4326"); var closuresLayer; lineWidth = [ [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [10, 12], [12, 14], [14, 16], [15, 17], [16, 18], [17, 19] ]; function drawLine(line) { var linePoints = []; var zoom = Waze.map.getZoom(); if (zoom >= lineWidth.length) { zoom = lineWidth.length - 1; } var p = new OpenLayers.Geometry.Point(line[0].x, line[0].y).transform(epsg4326, epsg900913); linePoints.push(p); for(var i = 1; i < line.length-1; i++) { var lp1 = line[i]; var lp2 = line[i + 1]; var dif_lon = Math.abs(lp1.x - lp2.x); var dif_lat = Math.abs(lp1.y - lp2.y); if (dif_lon < 0.0000001 && dif_lat < 0.0000001) continue; p = new OpenLayers.Geometry.Point(lp1.x, lp1.y).transform(epsg4326, epsg900913); linePoints.push(p); } p = new OpenLayers.Geometry.Point(line[line.length-1].x, line[line.length-1].y).transform(epsg4326, epsg900913); linePoints.push(p); var lineString = new OpenLayers.Geometry.LineString(linePoints); var lineFeature = new OpenLayers.Feature.Vector(lineString, null, { strokeColor: '#000000', strokeDashstyle: 'solid', strokeLinecap: 'round', strokeWidth: lineWidth[zoom][1]} ); closuresLayer.addFeatures(lineFeature); lineString = new OpenLayers.Geometry.LineString(linePoints); lineFeature = new OpenLayers.Feature.Vector(lineString, null, { strokeColor: '#FF0000', strokeDashstyle: 'solid', strokeLinecap: 'round', strokeWidth: lineWidth[zoom][0] } ); closuresLayer.addFeatures(lineFeature); lineString = new OpenLayers.Geometry.LineString(linePoints); lineFeature = new OpenLayers.Feature.Vector(lineString, null, { strokeColor: '#FFFFFF', strokeDashstyle: 'dot', strokeLinecap: 'square', strokeWidth: lineWidth[zoom][0] } ); closuresLayer.addFeatures(lineFeature); } function getRoutingURL(){ var server = Waze.location.code; var routingURL = 'https://www.waze.com'; if (~document.URL.indexOf('https://beta.waze.com')) { routingURL = 'https://beta.waze.com'; } switch(server){ case 'usa': routingURL += '/rtserver/web/TGeoRSS'; break; case 'row': routingURL += '/row-rtserver/web/TGeoRSS'; break; case 'il': routingURL += '/il-rtserver/web/TGeoRSS'; break; default: routingURL += '/rtserver/web/TGeoRSS'; } return routingURL; } function requestClosures() { if (closuresLayer.getVisibility()) { var extent = Waze.map.getExtent(); var oh = 500; var pLB = new OpenLayers.Geometry.Point(extent.left - oh, extent.bottom - oh).transform(epsg900913, epsg4326); var pRT = new OpenLayers.Geometry.Point(extent.right + oh, extent.top + oh).transform(epsg900913, epsg4326); var data = { ma: "600", mj: "100", mu: "100", left: pLB.x, right: pRT.x, bottom: pLB.y, top: pRT.y }; var url = getRoutingURL(); $.ajax({ dataType: "json", url: url, data: data, success: function(json) { if (json.error != undefined) { } else { closuresLayer.destroyFeatures(); var ids = []; if ("undefined" !== typeof(json.jams)) { var numjams = json.jams.length; for (var i = 0; i < numjams; i++) { var jam = json.jams[i]; if (jam.blockType === "ROAD_CLOSED_EVENT" || jam.blockType === "ROAD_CLOSED_CONSTRUCTION" || (typeof(jam.causeAlert) !== "undefined" && jam.causeAlert.subtype === "ROAD_CLOSED_EVENT")) { if (typeof(ids[jam.segments[0].ID]) === "undefined") { drawLine(jam.line); ids[jam.segments[0].ID] = 1; } } } } } } }); } } function changeLayer() { localStorage.DrawLiveMapClosures = closuresLayer.getVisibility(); requestClosures(); } function liveMapClosures_init() { closuresLayer = new OpenLayers.Layer.Vector("LiveMap closures", { displayInLayerSwitcher: true, uniqueName: "__DrawLiveMapClosures" }); Waze.map.addLayer(closuresLayer); if (localStorage.DrawLiveMapClosures) { closuresLayer.setVisibility(localStorage.DrawLiveMapClosures == "true"); } else { closuresLayer.setVisibility(true); } var roadGroupSelector = document.getElementById('layer-switcher-group_road'); if (roadGroupSelector != null) { var roadGroup = roadGroupSelector.parentNode.parentNode.querySelector('.children'); var toggler = document.createElement('li'); var togglerContainer = document.createElement('div'); togglerContainer.className = 'controls-container toggler'; var checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.id = 'layer-switcher-item_livemap_closures'; checkbox.className = 'toggle'; checkbox.checked = closuresLayer.getVisibility(); checkbox.addEventListener('click', function(e) { closuresLayer.setVisibility(e.target.checked); }); roadGroupSelector.addEventListener('click', function(e) { closuresLayer.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('LiveMap closures')); label.appendChild(labelText); togglerContainer.appendChild(label); toggler.appendChild(togglerContainer); roadGroup.appendChild(toggler); } var alertsLayer = Waze.map.getLayersBy('uniqueName', '__livemap_alerts').last(); if (typeof(alertsLayer) !== "undefined") { var closuresLayerZIdx = closuresLayer.getZIndex(); var alertsLayerZIdx = alertsLayer.getZIndex(); if (closuresLayerZIdx > alertsLayerZIdx) { closuresLayer.setZIndex(alertsLayerZIdx); alertsLayer.setZIndex(closuresLayerZIdx); } } Waze.map.events.register("zoomend", null, requestClosures); Waze.map.events.register("moveend", null, requestClosures); Waze.map.events.register("changelayer", null, changeLayer); requestClosures(); } function liveMapClosures_bootstrap() { if (typeof Waze === 'undefined' || typeof Waze.map === 'undefined' || document.querySelector('.list-unstyled.togglers .group') === null) { setTimeout(liveMapClosures_bootstrap, 500); } else { liveMapClosures_init(); } } liveMapClosures_bootstrap();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址