您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Get POI information from external sources
当前为
// ==UserScript== // @name WME E50 // @version 0.0.2 // @description Get POI information from external sources // @author Anton Shevchuk // @license MIT License // @include https://www.waze.com/editor* // @include https://www.waze.com/*/editor* // @include https://beta.waze.com/editor* // @include https://beta.waze.com/*/editor* // @exclude https://www.waze.com/user/editor* // @exclude https://beta.waze.com/user/editor* // @grant none // @require https://gf.qytechs.cn/scripts/24851-wazewrap/code/WazeWrap.js // @require https://gf.qytechs.cn/scripts/389117-wme-api-helper/code/WME%20API%20Helper.js?version=727077 // @namespace https://gf.qytechs.cn/users/227648 // ==/UserScript== /* jshint esversion: 6 */ /* global require, $, window, W, I18n, OL, APIHelper, WazeWrap */ (function () { 'use strict'; let helper, panel; let vectorLayer, vectorPoint, vectorLine; const NAME = 'E50'; // translation structure const TRANSLATION = { 'en': { title: 'Information' }, 'uk': { title: 'Інформація' }, 'ru': { title: 'Информация' } }; APIHelper.bootstrap(); APIHelper.addTranslation(NAME, TRANSLATION); class Provider { constructor(lat, lon) { this.lat = lat; this.lon = lon; } link(lat, lon, street, number, name = null) { let a = document.createElement('a'); a.href = '#'; a.dataset.lat = lat; a.dataset.lon = lon; a.dataset.street = street; a.dataset.number = number; a.dataset.name = name; a.innerHTML = [street, number, name].filter(x => !!x).join(', '); a.className = NAME + '-link'; return a; } result(prefix, item, postfix = '<br/>') { $('div.form-group.e50 > div.controls').append(prefix).append(item).append(postfix); } } class GisProvider extends Provider { request() { let url = 'https://catalog.api.2gis.ru/2.0/geo/search'; let data = { point: this.lon + ',' + this.lat, format: 'json', fields: 'items.links', key: 'rubnkm7490', locale: 'uk_UA' }; let self = this; $.ajax({ dataType: 'json', cache: false, url: url, data: data, error: function () { }, success: function (response) { if (!response.result) { return; } // 0 - building // 1 - district // 2 - city console.log(response.result); let res = response.result.items[0]; let output = []; if (res.name) { output.push(res.name); } else { output.push(res.address_name); } if (res.purpose_name) { output.push(res.purpose_name); } self.result('2GIS: ', output.join(', ')); } }); } } class OsmProvider extends Provider { request() { let url = 'https://nominatim.openstreetmap.org/reverse'; let data = { lon: this.lon, lat: this.lat, zoom: 18, format: 'json', addressdetails: 1, countrycodes: 'ua', 'accept-language': 'uk_UA' }; let self = this; $.ajax({ dataType: 'json', cache: false, url: url, data: data, error: function () { }, success: function (response) { if (!response.address) { return; } console.log(response); let output = []; let street = null; let number = null; if (response.address.road) { street = response.address.road; output.push(response.address.road); } if (response.address.house_number) { number = response.address.house_number; output.push(response.address.house_number); } let link = self.link(response.lat, response.lon, street, number, output.join(', ')); self.result('OSM: ', link); } }); } } class GMProvider extends Provider { request() { let url = 'https://www.waze.com/maps/api/place/nearbysearch/json'; let data = { location: this.lat + ',' + this.lon, key: 'AIzaSy' + 'CebbES' + 'rWERY1MRZ56gEAfpt7tK2R6hV_I', // extract it from WME radius: 80, fields: 'geometry,formatted_address', language: 'ua' }; let self = this; $.ajax({ dataType: 'json', cache: false, url: url, data: data, error: function() { }, success: function(response) { if (!response.results || !response.results.length) { return; } console.log(response.results); for (let i = 0; i < response.results.length; i++) { let res = response.results[i]; if (res.types.indexOf('point_of_interest') !== -1) { let link = self.link( res.geometry.location.lat, res.geometry.location.lng, null, null, res.name + ' ' + res.vicinity ); self.result('G: ', link); } } } }); } } class YMProvider extends Provider { request() { let url = 'https://geocode-maps.yandex.ru/1.x/'; let data = { geocode: this.lon + ',' + this.lat, apikey: '2fe62c0e-580f-4541-b325-7c896d8d9481', kind: 'house', results: 1, format: 'json', lang: 'uk_UA' }; let self = this; $.ajax({ dataType: 'json', cache: false, url: url, data: data, error: function () { }, success: function (response) { if (!response.response) { return; } if (!response.response.GeoObjectCollection.featureMember.length) { return; } console.log(response.response); self.result('Ya: ', response.response.GeoObjectCollection.featureMember[0].GeoObject.name); } }); } } $(document) .on('ready.apihelper', ready) .on('landmark.apihelper', '#edit-panel', landmarkPanel) .on('click', '.' + NAME + '-link', applyData) .on('mouseenter', '.' + NAME + '-link', showVector) .on('mouseleave', '.' + NAME + '-link', hideVector) ; function ready() { console.info('@ready'); helper = new APIHelperUI(NAME); panel = helper.createPanel(I18n.t(NAME).title); vectorLayer = new OL.Layer.Vector("E50VectorLayer", {displayInLayerSwitcher: false, uniqueName: "__E50VectorLayer"}); W.map.addLayer(vectorLayer); } function landmarkPanel(event, element) { console.info('@landmark'); let selected = APIHelper.getSelectedVenues()[0].geometry.getCentroid().clone(); selected.transform('EPSG:3857', 'EPSG:4326'); let position = new OpenLayers.LonLat(selected.x, selected.y); let Gis = new GisProvider(position.lat, position.lon); Gis.request(); let Osm = new OsmProvider(position.lat, position.lon); Osm.request(); //let Yandex = new YMProvider(position.lat, position.lon); //Yandex.request(); let Google = new GMProvider(position.lat, position.lon); Google.request(); let group = panel.toHTML(); element.prepend(group); } function applyData() { console.log(this.dataset); return false; } function showVector() { let from = APIHelper.getSelectedVenues()[0].geometry.getCentroid(); let to = new OL.Geometry.Point(this.dataset.lon, this.dataset.lat).transform('EPSG:4326', 'EPSG:900913'); vectorLine = new OL.Feature.Vector(new OL.Geometry.LineString([from, to]), {}, { strokeWidth: 4, strokeColor: '#00ece3', strokeLinecap: 'round' }); vectorPoint = new OL.Feature.Vector(to, {}, { pointRadius: 8, fillOpacity: 0, strokeColor: '#00ece3', strokeWidth: '2', strokeLinecap: 'round' }); vectorLayer.addFeatures([vectorLine, vectorPoint]); console.log(WazeWrap.Geometry.calculateDistance([to, from])); } function hideVector() { vectorLayer.removeAllFeatures(); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址