您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Добавление альтернативных названий (адресов)
当前为
// ==UserScript== // @name WME Add addresses for places // @version 0.18 // @description Добавление альтернативных названий (адресов) // @author ixxvivxxi // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/editor/* // @include https://editor-beta.waze.com/*/editor/* // @grant none // @namespace https://greasyfork.org/ru/scripts/12229-wme-add-alt-address-for-housing // ==/UserScript== function altAddress_bootstrap() { var bGreasemonkeyServiceDefined = false; try { if ("object" === typeof Components.interfaces.gmIGreasemonkeyService) { bGreasemonkeyServiceDefined = true; } } catch (err) { //Ignore. } if ( "undefined" === typeof unsafeWindow || ! bGreasemonkeyServiceDefined) { unsafeWindow = ( function () { var dummyElem = document.createElement('p'); dummyElem.setAttribute ('onclick', 'return window;'); return dummyElem.onclick (); } ) (); } /* begin running the code! */ setTimeout(startAltAddress,999); } function startAltAddress() { var POIaddresses = []; var POIs = []; Waze.selectionManager.events.register("selectionchanged", null, showTitle); Waze.model.events.register('mergeend', null, getPOIs); Waze.model.events.register('zoomend', null, getPOIs); var wazeActionAddLandmark = require("Waze/Action/AddLandmark"); var wazeActionUpdateObject = require("Waze/Action/UpdateObject"); var wazeActionDeleteObject = require("Waze/Action/DeleteObject"); var wazeActionUpdateFeatureAddress = require("Waze/Action/UpdateFeatureAddress"); var wazefeatureVectorLandmark = require("Waze/Feature/Vector/Landmark"); var address; var selectStreetName = ""; function getPOIs() { for (var idVenue in Waze.model.venues.objects) { var venue = Waze.model.venues.objects[idVenue]; var venueAddress = venue.getAddress(); var inPois = false; var category = venue.getMainCategory(); if (category == "NATURAL_FEATURES" || category == "OUTDOORS") { inPois = true; } for (var ir = 0; ir < POIs.length; ir++) { if (POIs[ir].attributes.id.toString().indexOf("-") != -1) {continue;} if (POIs[ir].attributes.id === idVenue) { POIs[ir] = venue; inPois = true; } } if (!inPois) { console.log(venue.getAddress()); POIs.push(venue); } } } function showTitle() { if(Waze.selectionManager.selectedItems.length === 0 || Waze.selectionManager.selectedItems.length > 1) return; if(Waze.selectionManager.selectedItems[0].model.type == "segment") { if (Waze.selectionManager.selectedItems[0].model.attributes.id.toString().indexOf("-") == -1) { address = Waze.selectionManager.selectedItems[0].model.getAddress(); //console.log(address); var title = "Update addresses"; if (address.country.id == 37 || address.country.id == 186) { title = "Обновить адреса"; } $('.more-actions').append('<button id="addPOIs" class="action-button btn btn-default">' + title + '</button>'); selectStreetName = address.street.name; } } } $('#sidebar').on('click', '#addPOIs', function(event) { event.preventDefault(); addPOIs(); }); function createPOI (poiobject) { var poi = new wazefeatureVectorLandmark(); var geometry = new OpenLayers.Geometry.Point(); geometry.x = poiobject.x + 2; geometry.y = poiobject.y + 2; poi.geometry = geometry; poi.attributes.categories = ["OTHER"]; poi.attributes.aliases.push(poiobject.houseNumber + " " + poiobject.streetName); if (hasChar(poiobject.houseNumber) || poiobject.houseNumber.indexOf("/") !== -1) { poi.attributes.name = poiobject.houseNumber; } if (poiobject.houseNumber.indexOf("/") != -1) { poi.attributes.aliases.push(poiobject.houseNumber.replace('/', 'к') + " " + poiobject.streetName); poi.attributes.aliases.push(poiobject.houseNumber.replace('/', ' корпус ') + " " + poiobject.streetName); } Waze.model.actionManager.add(new wazeActionAddLandmark(poi)); var poiAddress = poi.getAddress().attributes; console.log(poiAddress.city.name, poiobject.streetName, poiobject.houseNumber); if (poiAddress.city == null ) {return;} var residential = false; var newAddressAtts={streetName: poiobject.streetName, emptyStreet: false, cityName: poiAddress.city.name, emptyCity: false, stateID: poiAddress.state.id, countryID: poiAddress.country.id}; console.log(newAddressAtts); Waze.model.actionManager.add(new wazeActionUpdateFeatureAddress(poi, newAddressAtts, {streetIDField: 'streetID'} )); if (!hasChar(poiobject.houseNumber) && poiobject.houseNumber.indexOf("/") == -1) { console.log('ПТ'); Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: poiobject.houseNumber, residential: true})); residential = true; } else { Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: poiobject.houseNumber})); console.log('ПОИ'); } POIs.push(poi); } function addPOIs() { // $('#toolbar #layer-switcher .reload-button').click(); // setTimeout(function() { getPOIs(); $(".more-actions .edit-house-numbers").click(); setTimeout(function() { $('#map-lightbox .cancel').click(); for (var key in Waze.model.houseNumbers.objects) { //if (key != address.street.id) {continue;} if (Waze.model.houseNumbers.objects[key].numbers.length > 0) { for (var i=0; i<Waze.model.houseNumbers.objects[key].numbers.length; i++) { //console.log(Waze.model.houseNumbers.objects[key].getSegment()); if (Waze.model.houseNumbers.objects[key].getSegment() === undefined) {continue;} if (Waze.model.houseNumbers.objects[key].getSegment().getAddress().street === null) {continue;} if (Waze.model.houseNumbers.objects[key].getSegment().getAddress().street.name != address.street.name) {continue;} var number = Waze.model.houseNumbers.objects[key].numbers[i].number; var hasPOI = false; var hasRH = false; //for (var idVenue in Waze.model.venues.objects) { for (var ir = 0; ir < POIs.length; ir++) { var venue = POIs[ir]; var venueAddress = venue.getAddress().attributes; if (venueAddress === null || venueAddress.isEmpty === true ) {continue;} if (address.city.name == venueAddress.city.name && address.street.name == venueAddress.street.name && number == venueAddress.houseNumber) { hasPOI = true; hasRH = (hasRH) ? hasRH : venue.isResidential(); if (number.indexOf("/") !== -1 || hasChar(number)) { hasRH = true; } } // } if (venue.geometry.bounds.containsLonLat(Waze.model.houseNumbers.objects[key].numbers[i].geometry.toLonLat()) ) { //console.log('Обновление контура', number, address.street.name, hasPOI, hasRH); if (venue.attributes.streetID != address.street.id) { hasPOI = true; var newAddressAtts={streetName: address.street.name, emptyStreet: false, cityName: address.city.name, emptyCity: false, stateID: address.state.id, countryID: address.country.id}; Waze.model.actionManager.add(new wazeActionUpdateFeatureAddress(venue, newAddressAtts, {streetIDField: 'streetID'} )); var newAtts = {}; var haveChanges = false; if (venue.attributes.houseNumber != number.toString() && number.indexOf(" ") == -1) { newAtts.houseNumber = number; haveChanges = true; } if (venue.attributes.name != number.toString() && venue.attributes.name === "") { newAtts.name = number; haveChanges = true; } var aliases = venue.attributes.aliases; if (hasChar(number)) { hasRH = true; var length = venue.attributes.aliases.length; var street = number + " " + address.street.name; var hasAliasAddress = false; for (var ia = 0; ia < length; ia++) { if (street == venue.attributes.aliases[ia]) { hasAliasAddress = true; } } if (!hasAliasAddress) { aliases.push(street); haveChanges = true; } if ((address.country.id == 37 || address.country.id == 186) && number.indexOf("/") != -1) { hasAliasAddress = false; var street = number.replace('/', 'к') + " " + address.street.name; for (var ia = 0; ia < length; ia++) { if (street == venue.attributes.aliases[ia]) { hasAliasAddress = true; } } if (!hasAliasAddress) { aliases.push(street); haveChanges = true; } hasAliasAddress = false; var street = number.replace('/', ' корпус ') + " " + address.street.name; for (var ia = 0; ia < length; ia++) { if (street == venue.attributes.aliases[ia]) { hasAliasAddress = true; } } if (!hasAliasAddress) { aliases.push(street); haveChanges = true; } } } if (haveChanges) { newAtts.aliases = aliases; Waze.model.actionManager.add(new wazeActionUpdateObject(venue, newAtts)); } } } } // console.log(number, address.street.name, hasPOI, hasRH); //console.log('----------------------'); if (!hasPOI || !hasRH) { createPOI({ x: Waze.model.houseNumbers.objects[key].numbers[i].geometry.x, y: Waze.model.houseNumbers.objects[key].numbers[i].geometry.y, streetName: address.street.name, houseNumber: number }); } } } } }, 3000); // }, 3000); } function addAltNames(arr) { if ($('.alias-name').length>0) { $("#landmark-edit-general .aliases-view .delete").click(); } for (var i = 0; i < arr.length; i++) { $("#landmark-edit-general .aliases-view .add").click(); var elem; $('#landmark-edit-general .aliases-view input[type=text]').each(function(index){ if(i == index) {elem = $(this);} }); elem.val(arr[i]); elem.change(); } } function isChar(number) { var reg = /([0-9])[А-Яа-я]/; switch (true) { case reg.test(number): return true; default: return false; } } function hasChar(number) { var reg = /[а-яА-Яa-zA-Z/-]/; switch (true) { case reg.test(number): return true; default: return false; } } } altAddress_bootstrap();