WME Manhattan UR Project Overlay

Adds a group area overlay for the Manhattan UR Project (2018).

目前为 2018-06-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME Manhattan UR Project Overlay
  3. // @namespace WazeDev
  4. // @version 2018.06.11.001
  5. // @description Adds a group area overlay for the Manhattan UR Project (2018).
  6. // @author MapOMatic, Dude495
  7. // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
  8. // @require https://gf.qytechs.cn/scripts/24851-wazewrap/code/WazeWrap.js
  9. // @license GNU GPLv3
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. var Version = GM_info.script.version;
  15. var ScriptName = GM_info.script.name;
  16. var UpdateAlert = "yes";
  17. var UpdateNotes = ScriptName + " has been updated to v" + Version;
  18. UpdateNotes = UpdateNotes + "\n\n" +
  19. "* Adjusted Group 1 overlay color to differentiate from Group 2";
  20. if (UpdateAlert === "yes") {
  21. ScriptName = ScriptName.replace( /\s/g, "") + "Version";
  22. if (localStorage.getItem(ScriptName) !== Version) {
  23. alert(UpdateNotes);
  24. localStorage.setItem(ScriptName, Version);
  25. }
  26. }
  27. 'use strict';
  28. // Enter the state abbreviation:
  29. var _stateAbbr = "Manhattan";
  30.  
  31. // Enter the MapRaid area names and the desired fill colors, in order they appear in the original map legend:
  32. var _areas = {
  33. '1':{fillColor:'#ff99e6'},
  34. '2':{fillColor:'#FF0000'},
  35. '3':{fillColor:'#01579b'},
  36. '4':{fillColor:'#7cb342'},
  37. '5':{fillColor:'#f57c00'},
  38. '6':{fillColor:'#7cb342'},
  39. '7':{fillColor:'#f57c00'},
  40. '8':{fillColor:'#FF0000'},
  41. '9':{fillColor:'#01579b'},
  42. '10':{fillColor:'#FF0000'},
  43. };
  44.  
  45. var _settingsStoreName = '_wme_' + _stateAbbr + '_mapraid';
  46. var _settings;
  47. var _features;
  48. var _kml;
  49. var _layerName = _stateAbbr + ' MapRaid';
  50. var _layer = null;
  51. var defaultFillOpacity = 0.3;
  52.  
  53. function loadSettingsFromStorage() {
  54. _settings = $.parseJSON(localStorage.getItem(_settingsStoreName));
  55. if(!_settings) {
  56. _settings = {
  57. layerVisible: true,
  58. hiddenAreas: []
  59. };
  60. } else {
  61. _settings.layerVisible = (_settings.layerVisible === true);
  62. _settings.hiddenAreas = _settings.hiddenAreas || [];
  63. }
  64. }
  65.  
  66. function saveSettingsToStorage() {
  67. if (localStorage) {
  68. var settings = {
  69. layerVisible: _layer.visibility,
  70. hiddenAreas: _settings.hiddenAreas
  71. };
  72. localStorage.setItem(_settingsStoreName, JSON.stringify(settings));
  73. }
  74. }
  75.  
  76. function updateDistrictNameDisplay(){
  77. $('.mapraid-region').remove();
  78. if (_layer !== null) {
  79. var mapCenter = new OpenLayers.Geometry.Point(W.map.center.lon,W.map.center.lat);
  80. for (var i=0;i<_layer.features.length;i++){
  81. var feature = _layer.features[i];
  82. var color;
  83. var text = '';
  84. var num;
  85. var url;
  86. if(feature.geometry.containsPoint(mapCenter)) {
  87. text = feature.attributes.name;
  88. color = '#ff0';
  89. var $div = $('<div>', {id:'mapraid', class:"mapraid-region", style:'display:inline-block;margin-left:10px;', title:'Click to toggle color on/off for this group'})
  90. .css({color:color, cursor:"pointer", fontWeight:'bold', fontSize:"14px"})
  91. .click(toggleAreaFill);
  92. var $span = $('<span>').css({display:'inline-block'});
  93. $span.text('Group: ' + text).appendTo($div);
  94. $('.location-info-region').parent().append($div);
  95. if (color) {
  96. break;
  97. }
  98. }
  99. }
  100. }
  101. }
  102.  
  103. function toggleAreaFill() {
  104. var text = $('#mapraid span').text();
  105. if (text) {
  106. var match = text.match(/^Group: (.*)/);
  107. if (match.length > 1) {
  108. var areaName = match[1];
  109. var f = _layer.getFeaturesByAttribute('name', areaName)[0];
  110. var hide = f.attributes.fillOpacity !== 0;
  111. f.attributes.fillOpacity = hide ? 0 : defaultFillOpacity;
  112. var idx = _settings.hiddenAreas.indexOf(areaName);
  113. if (hide) {
  114. if (idx === -1) _settings.hiddenAreas.push(areaName);
  115. } else {
  116. if (idx > -1) {
  117. _settings.hiddenAreas.splice(idx,1);
  118. }
  119. }
  120. saveSettingsToStorage();
  121. _layer.redraw();
  122. }
  123. }
  124. }
  125.  
  126.  
  127. function init() {
  128. loadSettingsFromStorage();
  129. var layerid = 'wme_' + _stateAbbr + '_mapraid';
  130. var wkt = new OL.Format.WKT();
  131. var _features = wktStrings.map(polyString => {
  132. var f = wkt.read(polyString);
  133. f.geometry.transform(W.map.displayProjection, W.map.projection);
  134. return f;
  135. });
  136. var i = 0;
  137. for(var areaName in _areas) {
  138. _features[i].attributes.name = areaName;
  139. _features[i].attributes.fillColor = _areas[areaName].fillColor;
  140. _features[i].attributes.fillOpacity = _settings.hiddenAreas.indexOf(areaName) > -1 ? 0 : defaultFillOpacity;
  141. i++;
  142. }
  143. var layerStyle = new OpenLayers.StyleMap({
  144. strokeDashstyle: 'solid',
  145. strokeColor: '#000000',
  146. strokeOpacity: 1,
  147. strokeWidth: 3,
  148. fillOpacity: '${fillOpacity}',
  149. fillColor: '${fillColor}',
  150. label: 'Group ${name}',
  151. fontOpacity: 0.9,
  152. fontSize: "20px",
  153. fontFamily: "Arial",
  154. fontWeight: "bold",
  155. fontColor: "#fff",
  156. labelOutlineColor: "#000",
  157. labelOutlineWidth: 2
  158. });
  159. _layer = new OL.Layer.Vector(_stateAbbr + " UR Project", {
  160. rendererOptions: { zIndexing: true },
  161. uniqueName: layerid,
  162. shortcutKey: "S+" + 0,
  163. layerGroup: _stateAbbr + '_mapraid',
  164. zIndex: -9999,
  165. displayInLayerSwitcher: true,
  166. visibility: _settings.layerVisible,
  167. styleMap: layerStyle
  168. });
  169. I18n.translations[I18n.locale].layers.name[layerid] = _stateAbbr + " MapRaid";
  170. _layer.addFeatures(_features);
  171. W.map.addLayer(_layer);
  172. W.map.events.register("moveend", null, updateDistrictNameDisplay);
  173. window.addEventListener('beforeunload', function saveOnClose() { saveSettingsToStorage(); }, false);
  174. updateDistrictNameDisplay();
  175.  
  176. // Add the layer checkbox to the Layers menu.
  177. WazeWrap.Interface.AddLayerCheckbox("display", _stateAbbr + " UR Project", _settings.layerVisible, layerToggled);
  178. }
  179.  
  180. function layerToggled(visible) {
  181. _layer.setVisibility(visible);
  182. saveSettingsToStorage();
  183. }
  184.  
  185. function bootstrap() {
  186. if (W && W.loginManager && W.loginManager.isLoggedIn()) {
  187. init();
  188. console.log(_stateAbbr + ' Area Overlay:', 'Initialized');
  189. } else {
  190. console.log(_stateAbbr + ' MR Overlay: ', 'Bootstrap failed. Trying again...');
  191. window.setTimeout(() => bootstrap(), 500);
  192. }
  193. }
  194.  
  195. bootstrap();
  196.  
  197. var wktStrings = [
  198. 'POLYGON((-73.9314651 40.87834789999999,-73.9465714 40.8525789,-73.9360781 40.848959699999995,-73.9282894 40.84608639999999,-73.9242554 40.851475300000004,-73.9141273 40.86329020000001,-73.9101791 40.86926179999999,-73.9106941 40.874064600000004,-73.9203072 40.87549239999998,-73.9223671 40.877828799999996,-73.9314651 40.87834789999999))',
  199. 'POLYGON((-73.9577293 40.853617699999994,-73.9580297 40.85176740000001,-73.9482021 40.8502417,-73.9493394 40.846662599999995,-73.9397903 40.8429294,-73.9360781 40.848959699999995,-73.9465714 40.8525789,-73.9577293 40.853617699999994))',
  200. 'POLYGON((-73.9282894 40.84608639999999,-73.9360781 40.848959699999995,-73.9397903 40.8429294,-73.9318943 40.8398368,-73.9282894 40.84608639999999))',
  201. 'POLYGON((-73.9539957 40.76147969999999,-73.9419593 40.774861800000004,-73.9383316 40.78392099999999,-73.9298344 40.792986299999974,-73.9276457 40.800588600000005,-73.9327097 40.80861229999998,-73.9344908 40.83205050000001,-73.9318943 40.8398368,-73.9397903 40.8429294,-73.9493394 40.846662599999995,-73.9688873 40.8152383,-73.9931506 40.77659710000001,-73.9539957 40.76147969999999))',
  202. 'POLYGON((-73.9623213 40.75141850000001,-73.9539957 40.76147969999999,-73.9931506 40.77659710000001,-74.0017176 40.766826600000016,-73.9623213 40.75141850000001))',
  203. 'POLYGON((-73.9712048 40.73919330000002,-73.9623213 40.75141850000001,-74.0017176 40.766826600000016,-74.0089273 40.75466940000002,-73.9712048 40.73919330000002))',
  204. 'POLYGON((-74.0089273 40.75466940000002,-74.0162659 40.747191899999976,-73.9693165 40.72761650000001,-73.9712048 40.73919330000002,-74.0089273 40.75466940000002))',
  205. 'POLYGON((-74.015193 40.73129140000002,-73.9728785 40.71662309999999,-73.9693165 40.72761650000001,-74.0162659 40.747191899999976,-74.015193 40.73129140000002))',
  206. 'POLYGON((-74.015193 40.73129140000002,-74.0190125 40.71792429999999,-73.9884567 40.70647379999999,-73.9728785 40.71662309999999,-74.015193 40.73129140000002))',
  207. 'POLYGON((-74.0196991 40.696973700000015,-74.0280247 40.68870870000001,-74.0287543 40.68385969999999,-74.0204716 40.683111399999994,-74.0087986 40.69014049999997,-74.0006447 40.70439170000001,-73.9884567 40.70647379999999,-74.0190125 40.71792429999999,-74.0196991 40.696973700000015))'
  208. ];
  209. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址