您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays the locality of the current location and provides links to open GIS if available
当前为
// ==UserScript== // @name WME GIS Buttons // @author @Philistine11 // @namespace https://greasyfork.org/en/users/53803 // @description Displays the locality of the current location and provides links to open GIS if available // @include https://*.waze.com/editor* // @include https://*.waze.com/*/editor* // @version 1.5.0 // ==/UserScript== function gis_init(model, modeId) { W.app.modeController.model.bind('change:mode', gis_init); if (modeId === 1) return; var location = $('div.location-info-region'); if (location.length === 0) { setTimeout(gis_init, 500); return; } location.after('<div class="input-group input-group-sm" style="float:left; padding-left:2rem;"><span class="input-group-addon" style="display:table-cell; font-size:2rem; line-height:0; width:0;"><span id="gisStatus" class="fa fa-spinner fa-pulse" style="line-height:0;"></span></span><div class="input-group-btn" style="width:0;"><a id="gisLocality" class="btn btn-default disabled hidden" style="border:1px solid" target="_blank" href="#">Locality</a><a id="gisCounty" class="btn btn-default disabled hidden" style="border:1px solid" target="_blank" href="#">County</a><a id="gisState" class="btn btn-default disabled hidden" style="border:1px solid" target="_blank" href="#">State</a></span></div>'); var GISButtonsAPIKey = localStorage.getItem('GISButtonsAPIKey'); $('#gisStatus').click(() => { do { GISButtonsAPIKey = prompt("Enter your GIS Buttons API key:", GISButtonsAPIKey || "").trim(); } while (!GISButtonsAPIKey || GISButtonsAPIKey.length != 39); localStorage.setItem('GISButtonsAPIKey', GISButtonsAPIKey); update(); }); var states = {}; $.getJSON('https://script.google.com/macros/s/AKfycbx2bytvT5Un0TWcaU7BpVkauqeE8zqt8Mek7Zq-OF-bznGYDyZw/exec?link=10dR8z16eKPHeI-ywLcHh2UNS3enQ7gt36Hhzm9nOJbA', rows => { for (var row in rows) states[rows[row][0]] = rows[row][1]; if (GISButtonsAPIKey) update(); else $('#gisStatus').removeClass().addClass('fa fa-key').css('color','red').attr('title','Click to set GIS Buttons API Key'); }); var update = () => { $('#gisStatus').removeClass().addClass('fa fa-spinner fa-pulse').css('color','').attr('title',''); var center = W.map.getCenter().transform(new OL.Projection('EPSG:900913'), new OL.Projection('EPSG:4326')); $.getJSON(`https://maps.googleapis.com/maps/api/geocode/json?latlng=${center.lat},${center.lon}&key=${GISButtonsAPIKey}`, data => { if (data.status === 'OK') { var locs = data.results[0].address_components; var locality = '', county = '', state = ''; $('#gisLocality, #gisCounty, #gisState').addClass('hidden'); for (var loc = 0; loc < locs.length; loc++) { if (locs[loc].types.indexOf('administrative_area_level_1') !== -1) { state = locs[loc].long_name; $('#gisState').removeClass('hidden').text(state); } else if (locs[loc].types.indexOf('administrative_area_level_2') !== -1) { county = locs[loc].long_name; $('#gisCounty').removeClass('hidden').text(county); } else if (locs[loc].types.indexOf('locality') !== -1) { locality = locs[loc].long_name; $('#gisLocality').removeClass('hidden').text(locality); } } $('#gisLocality, #gisCounty, #gisState').prop('href', '#').addClass('disabled'); new Promise((resolve, reject) => { if (states.hasOwnProperty(state)) { resolve(new Promise((resolve, reject) => { if (typeof (states[state]) === 'string') $.getJSON(`https://script.google.com/macros/s/AKfycbx2bytvT5Un0TWcaU7BpVkauqeE8zqt8Mek7Zq-OF-bznGYDyZw/exec?link=${states[state]}`, rows => { states[state] = rows; resolve(); }); else resolve(); }).then(() => { for (var row in states[state]) if (states[state][row][2] !== '') if (states[state][row][1] === 'State') { $('#gisState').prop('href', states[state][row][2].replace('<lat>',center.lat).replace('<lon>',center.lon).replace('<zoom>',W.map.getZoom()+12)).removeClass('disabled'); } else if (states[state][row][1] === 'County') { if (county.indexOf(states[state][row][0]) != -1) $('#gisCounty').prop('href', states[state][row][2].replace('<lat>',center.lat).replace('<lon>',center.lon).replace('<zoom>',W.map.getZoom()+12)).removeClass('disabled'); } else if (states[state][row][0] === locality) $('#gisLocality').prop('href', states[state][row][2].replace('<lat>',center.lat).replace('<lon>',center.lon).replace('<zoom>',W.map.getZoom()+12)).removeClass('disabled'); })); } resolve(); }).then(() => $('#gisStatus').removeClass().addClass('fa fa-globe')).catch(error => console.warn(error)); } else { console.error("GIS Buttons", data); $('#gisStatus').removeClass().addClass('fa fa-exclamation-circle').css('color','red').attr('title', "Check console for errors"); } }); }; var trigger; W.map.events.register('movestart', null, () => clearTimeout(trigger)); W.map.events.register('moveend', null, () => {if (GISButtonsAPIKey) trigger = setTimeout(update, 1000);}); } gis_init();