WME Add Uturns from node

Add uturns from node

目前为 2016-02-08 提交的版本。查看 最新版本

// ==UserScript==
// @name         WME Add Uturns from node
// @version      0.1
// @description  Add uturns from node
// @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://gf.qytechs.cn/users/10105
// ==/UserScript==

function Uturns_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(startUturns,999);
}
function startUturns() {

    Waze.selectionManager.events.register("selectionchanged", null, showButton);
    var wazeActionModifyConnection= require("Waze/Action/ModifyConnection")
  

    function showButton() {
        if(Waze.selectionManager.selectedItems.length == 0 || Waze.selectionManager.selectedItems.length > 1) return;
        if(Waze.selectionManager.selectedItems[0].model.type == "node") {

           $('.side-panel-section:first-child').append('<button id="addUturns" class="btn btn-default">add uturns</button>');
        }

    }

  $('#sidebar').on('click', '#addUturns', function(event) {
      var node = Waze.selectionManager.selectedItems[0].model;
      var segIDs = node.attributes.segIDs;
      
      for (var i = 0; i < segIDs.length; i++) {
          var segment = Waze.model.segments.objects[segIDs[i]];
          
          if (segment.attributes.fromNodeID == node.attributes.id) {
              console.log('А', segment.attributes.id);
              
              segment.attributes.fromConnections[segment.attributes.id] = true;
              Waze.model.actionManager.add(new wazeActionModifyConnection(segment.attributes.id, segment.getFromNode(), segment.attributes.id,segment.getFromNode()));
          } else {
              console.log('B', segment.attributes.id);
              segment.attributes.toConnections[segment.attributes.id] = true;
              Waze.model.actionManager.add(new wazeActionModifyConnection(segment.attributes.id, segment.getToNode(), segment.attributes.id, segment.getToNode()));
          }

      }

  });

  function addPOIs() {


       $(".more-actions .edit-house-numbers").click();

        setTimeout(function() {
          $('#map-lightbox .toolbar .cancel').click();

          for (var key in Waze.model.houseNumbers.objects) {

           if (Waze.model.houseNumbers.objects[key].numbers.length > 0) {
            for (var i=0; i<Waze.model.houseNumbers.objects[key].numbers.length; i++) {
              var number = Waze.model.houseNumbers.objects[key].numbers[i].number;
              var hasPOI = false;
							var hasRH = false;


              for (var idVenue in Waze.model.venues.objects) {
								var venue = Waze.model.venues.objects[idVenue];
								var hasRH_ = false;
								var normalCategory = true;
								for (var ic = 0; ic < venue.attributes.categories.length; ic++) {
									var category = venue.attributes.categories[ic];
									if (category == "PARKING_LOT" || category == "PARK" || category == "RIVER_STREAM" || category == "FOREST_GROVE" || category == "NATURAL_FEATURES" || category == "SEA_LAKE_POOL") {
										normalCategory = false;
									}
									if (category == "RESIDENCE_HOME" && venue.attributes.houseNumber == number.toString() && venue.attributes.streetID == address.street.id ) {
										hasRH_ = true;
										hasRH = true;

									}
								}


								if (normalCategory && !hasRH_ && venue.geometry.bounds.containsLonLat(Waze.model.houseNumbers.objects[key].numbers[i].geometry.toLonLat()) ) {

									hasPOI = true;
									if (venue.attributes.streetID != address.street.id) {
										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)) {

										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));
									}
								}
              }
							if (!hasRH && number.indexOf(" ") == -1  && !hasChar(number)) {

								var poi = new wazefeatureVectorLandmark();
								poi.geometry = Waze.model.houseNumbers.objects[key].numbers[i].geometry.clone();
								poi.geometry.x = poi.geometry.x + 2;
								poi.geometry.y = poi.geometry.y + 2;
								poi.attributes.categories = ["OTHER"];
								Waze.model.actionManager.add(new wazeActionAddLandmark(poi));

								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(poi, newAddressAtts, {streetIDField: 'streetID'} ));
								Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: number, residential: true}));

							}

              if (!hasPOI && hasChar(number)) {
								var poi = new wazefeatureVectorLandmark();
                poi.geometry = Waze.model.houseNumbers.objects[key].numbers[i].geometry.clone();
                poi.attributes.categories = ["OTHER"];
                poi.attributes.name = number;
                poi.attributes.aliases.push(number + " " + address.street.name);

								if ((address.country.id == 37 || address.country.id == 186) && number.indexOf("/") != -1) {
									poi.attributes.aliases.push(number.replace('/', 'к') + " " + address.street.name);
									poi.attributes.aliases.push(number.replace('/', ' корпус ') + " " + address.street.name);
								}

                Waze.model.actionManager.add(new wazeActionAddLandmark(poi));
								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(poi, newAddressAtts, {streetIDField: 'streetID'} ));
								if (number.indexOf(" ") == -1) {
									Waze.model.actionManager.add(new wazeActionUpdateObject(poi, {houseNumber: number}));
								}
              }
            }
          }
        }
         }, 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;
          break;
        default:
          return false;
      }
    }

    function hasChar(number) {
      var reg = /[а-яА-Яa-zA-Z/-]/;
      switch (true) {
        case reg.test(number):
          return true;
          break;
        default:
          return false;
      }
    }

}

Uturns_bootstrap();

QingJ © 2025

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