WME Split POI

Split POI with a new seg

As of 16.12.2015. See апошняя версія.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name            WME Split POI
// @namespace	      https://greasyfork.org/fr/scripts/13008-wme-split-poi
// @description	    Split POI with a new seg
// @description:fr  Découpage d'un POI en deux en utisant un nouveau segment
// @include	        https://www.waze.com/editor/*
// @include	        https://www.waze.com/*/editor/*
// @include         https://editor-beta.waze.com/*
// @exclude         https://www.waze.com/user/*
// @icon            data:image/png;base64,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
// @author          seb-d59
// @version	        1.3
// @grant           none
// ==/UserScript==

var LevelAutorise=3;
var WMESP_Version = GM_info.script.version;
var WMESP_OldVersion = WMESP_Version;
var WMESP_Maj = {
	fr: "Mise à jour WME Split POI: v" + WMESP_Version + "\nMinor update",
	en: "Update WME Split POI: v" + WMESP_Version + "\nMminor update"
	};

/* bootstrap, will call initialize() */
function WMESP_bootstrap(){
	log('Init');
	if (typeof(unsafeWindow) === "undefined"){
		unsafeWindow = ( function () {
			var dummyElem = document.createElement('p');
			dummyElem.setAttribute('onclick', 'return window;');
			return dummyElem.onclick();
		}) ();
	}
	/* begin running the code! */
	setTimeout(initialize, 1000);
}

//==========  Helper ==============================//
function getElementsByClassName(classname, node) {
  if(!node) node = document.getElementsByTagName("body")[0];
  var a = [];
  var re = new RegExp('\\b' + classname + '\\b');
  var els = node.getElementsByTagName("*");
  for (var i=0,j=els.length; i<j; i++)
    if (re.test(els[i].className)) a.push(els[i]);
  return a;
}

function getId(node) {
	return document.getElementById(node);
}

function log(msg, obj)
{
  if (obj==null)
      console.log("WME Split POI v" + WMESP_Version + " - " + msg);
  else
      console.debug("WME Split POI v" + WMESP_Version + " - " + msg + " " ,obj);
}
function debuglog(msg, obj)
{
  if ( LevelAutorise > 1)
  { if (obj==null)
        console.log("WME Split POI v" + WMESP_Version + " - " + msg);
    else
        console.debug("WME Split POI v" + WMESP_Version + " - " + msg + " " ,obj);
  }
}    
function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}


//==========  /Helper ==============================//

function WMESP_TestVersion() {

	if (typeof(localStorage.WMESPVersion) !== "undefined" && IsJsonString(localStorage.getItem('WMESPVersion'))) {
		WMESP_OldVersion=JSON.parse(localStorage.WMESPVersion);
  }else WMESP_OldVersion = "1.1";

  var locale = navigator.language.match(/fr|en/);
	var WMESPMaj = "";
		
	if(locale != null){
		switch(locale[0]) {
			case "fr":
				WMESPMaj=WMESP_Maj.fr;
				break;
			case "en":
				WMESPMaj=WMESP_Maj.en;
				break;
		}
	}else if(locale == null){
		WMESPMaj=WMESP_Maj.en;
	}
	log('WMESP_OldVersion ='+WMESP_OldVersion+'; WMESP_Version ='+WMESP_Version);
	if (WMESP_OldVersion != WMESP_Version) {
		alert(WMESPMaj);
		WMESP_OldVersion = WMESP_Version;
	}
  localStorage.setItem('WMESPVersion', JSON.stringify(WMESP_Version));
  

}

function initialize()
{
    debuglog ("init");
    initializeWazeObjects();   
    initWazeAPI(emptyFunc);
    
}

function emptyFunc(){}


function initWazeAPI(handler)
{
    var APIRequired=[{o: "Waze",												      s: "waze"},
                     {o: "Waze.model",											  s: "wazeModel"},
                     {o: "Waze.map",											    s: "wazeMap"},
                     {o: "Waze.loginManager",									s: "loginManager"},
                     {o: "Waze.selectionManager",							s: "selectionManager"},
                     {o: "Waze.loginManager.user",						s: "me"},
                     {o: "Waze/Action/UpdateObject",					s: "WazeActionUpdateObject"},
                     {o: "Waze/Action/UpdateSegmentGeometry", s: "WazeUpdateSegmentGeometry"},
                     {o: "Waze/Action/UpdateFeatureGeometry",	s: "WazeActionUpdateFeatureGeometry"},
                     {o: "Waze/Feature/Vector/Landmark",			s: "WazefeatureVectorLandmark"},
                     {o: "Waze/Action/AddLandmark",						s: "WazeActionAddLandmark"}
                     ];
                     
    if (typeof wazeAPI === "undefined")
        wazeAPI={};
    for (var i=0; i<APIRequired.length; i++)
    {
        if (APIRequired[i].o.indexOf('/')!=-1)
        {
            wazeAPI[APIRequired[i].s]=require(APIRequired[i].o);
            if (typeof wazeAPI[APIRequired[i].s] === "undefined")
            {
                window.setTimeout(initWazeAPI, 500);
                return;
            }
        }
        else
        {
            var path=APIRequired[i].o.split('.');
            var object=unsafeWindow;
            for (var j=0; j<path.length; j++)
            {
                object=object[path[j]];
                if (typeof object === "undefined")
                {
                    window.setTimeout(initWazeAPI, 500);
                    return;
                }
            }
            if (APIRequired[i].s!=null)
            {
                wazeAPI[APIRequired[i].s] = object;
            }
        }
    }
    debuglog("wazeAPI:", wazeAPI);
    handler();
    
}

function waitForObject(object)
{
    var obj=null;
    debuglog ("eval: " + "typeof(unsafeWindow." + object.o.replace(/\//g, '.') + ")");
    if (object.r==true)
    {
        eval ((object.s!=null?object.s:'dummy') + '=require("' + object.o + '")');
        eval ("obj=" + (object.s!=null?object.s:'dummy'));
    		debuglog("obj", obj);
    }
        //obj=require(object.o);
		else
        obj=eval("typeof(unsafeWindow." + object.o.replace(/\//g, '.') + ")");
    if(obj === "undefined")
    {
        debuglog(object.o + ' KO');
        window.setTimeout(waitForObject.caller, 500);
        return false;
    }
    debuglog(object.s + ' OK');


    if (object.s!=null && object.r==false)
        eval (object.s + "=" + object.o.replace(/\//g, '.'));

    return true;
}

  function initializeWazeObjects()
    {
         
        if (typeof unsafeWindow === "undefined")
        {
            unsafeWindow    = ( function () {
                var dummyElem = document.createElement('p');
                dummyElem.setAttribute('onclick', 'return window;');
                return dummyElem.onclick();
            }) ();
        }
        var objectToCheck = [
        	{o: "Waze",																s: "waze",															r: false},
				  {o: "Waze.model",													s: "wazeModel",												r: false},
				  {o: "OpenLayers",													s: "wazeOL",													r: false},
				  {o: "Waze.loginManager",									s: "loginManager",										r: false},
				  {o: "Waze.selectionManager",							s: "selectionManager",								r: false},
				  {o: "Waze.loginManager.user",							s: "me",															r: false},
				  {o: "Waze/Action/UpdateObject",						s: "WazeActionUpdateObject",					r: true},
					{o: "Waze/Action/UpdateFeatureAddress",		s: "WazeActionUpdateFeatureAddress",	r: true},
				  {o: "Waze/Action/DeleteObject",						s: "WazeActionDeleteObject", 					r: true},
				  {o: "Waze/Action/UpdateFeatureGeometry",	s: "WazeActionUpdateFeatureGeometry", r: true},
          {o: "Waze/Feature/Vector/Landmark",			  s: "WazefeatureVectorLandmark",       r: true},
          {o: "Waze/Action/AddLandmark",						s: "WazeActionAddLandmark",           r: true},
          {o: "localStorage",										    s: null,                              r: false}
				  ];
        for (var i=0; i<objectToCheck.length; i++)
        {
            if (!waitForObject(objectToCheck[i])) return;
        }
        initializeWazeUI();
    }
        
function initializeWazeUI()
{

    var userInfo = getId('user-info');
    if (userInfo==null)
    {
        window.setTimeout(initializeWazeUI, 500);
        return;
    }

    var navTabs=userInfo.getElementsByTagName('ul');
    if (navTabs.length==0)
    {
        window.setTimeout(initializeWazeUI, 500);
        return;
    }
    if (typeof(navTabs[0])==='undefined')
    {
        window.setTimeout(initializeWazeUI, 500);
        return;
    }
    
    var tabContents=userInfo.getElementsByTagName('div');
    if (tabContents.length==0)
    {
        window.setTimeout(initializeWazeUI, 500);
        return;
    }
    if (typeof(tabContents[0])==='undefined')
    {
        window.setTimeout(initializeWazeUI, 500);
        return;
    }
    
    WMESP_TestVersion();
    
		selectionManager.events.register("selectionchanged", null, WMESP_newSelectionAvailable);
    
    log("init done.");
}

function WMESP_newSelectionAvailable()
{
    if (selectionManager.selectedItems.length!=1)
        return;
    var selectedObject = selectionManager.selectedItems[0].model;
    if (selectedObject.type!="venue")
        return;
    
    var attributes = selectedObject.attributes;
		
		if (!attributes.geometry.hasOwnProperty("components"))
		  return;
		
		if (!((attributes.categories == "NATURAL_FEATURES" ) || (attributes.categories == "SEA_LAKE_POOL") || (attributes.categories == "FOREST_GROVE") || (attributes.categories == "RIVER_STREAM" ) || (attributes.categories == "CANAL" )))
		  return;
		
    var editPanel=getId('edit-panel');
    if (editPanel.firstElementChild.style.display=='none')
        window.setTimeout(WMESP_newSelectionAvailable, 100);
    
    // ok: 1 selected item and pannel is shown

    // On verifie que le segment est éditable
    if (!objIsEditable(selectedObject))
        return;
    
    if (selectedObject.type=="venue")
    {
        item=getId("landmark-edit-general");
        
        var attSection = getElementsByClassName("attributes-form side-panel-section", item);
        var btnResidential = getElementsByClassName("btn-link toggle-residential",item);
        var parent1 = btnResidential[0].parentNode;
        var parent = parent1.parentNode;
        var WMESP_Controle=document.createElement('Div');
    
        WMESP_Controle.id="WMESP-Controle";
        WMESP_Controle.innerHTML+='<br><input type="button" id="_btnSplitPOI" value="Split POI"><br>';
		    attSection[0].insertBefore(WMESP_Controle, parent);
        getId("_btnSplitPOI").onclick=SplitPOI;
    }
    
}


function onScreen(obj)
{
    if (obj.geometry)
    {
        return(wazeMap.getExtent().intersectsBounds(obj.geometry.getBounds()));
    }
    return false;
}

function objIsEditable(obj)
{
    if (obj==null) return false;
    if (Waze.loginManager.user.isCountryManager()) return true;
    
    if (obj.attributes.permissions == 0)
      return false;

    return true;
}

function SplitPOI()
{
    
    if (selectionManager.selectedItems.length!=1)
        return;
    var poi = selectionManager.selectedItems[0].model;
    if (poi.type!="venue") 
        return;
    
    var poiAttr = poi.attributes;
    var poiId = poiAttr.id;
		
  	if (!poiAttr.geometry.components[0].hasOwnProperty("components"))
		  return;
	
	  
		var poiPoints = [];
		var segPoints = [];

		debuglog("poi",poi);
		debuglog("poiAttr",poiAttr);
		for (var seg in Waze.model.segments.objects)
    {
      var segment = Waze.model.segments.get(seg);
      var segAttr = segment.attributes;
      if (segAttr.primaryStreetID==null)
      {
        if (onScreen(segment))
	      {
          var segLineString = segAttr.geometry.clone();
        }
      }
		}
		
		var poiGeo = poiAttr.geometry.clone();
		var oldPoiGeo = poiAttr.geometry.clone(); 
		var poiLineString = poiGeo.components[0].clone();
    
    var poiLine = new OpenLayers.Geometry.LinearRing();
    var segLine = new OpenLayers.Geometry.LinearRing();
   
    var intersectPoint = [];
    var intersectLine  = [];
    
    // Calcul des point d'intersection seg // poi
    for (var n=0; n < parseInt(poiLineString.components.length-1); n++)
    {
      poiLine.components["0"] = poiLineString.components[n].clone();
		  poiLine.components["1"] = poiLineString.components[n+1].clone();
      
      for (var m=0; m < parseInt(segLineString.components.length-1); m++)
      {
        segLine.components["0"] = segLineString.components[m].clone();
        segLine.components["1"] = segLineString.components[m+1].clone();
        if (poiLine.intersects(segLine))
        {
          intersectPoint.push({index: n, intersect: intersection(poiLine, segLine)});
        }
        segLine.removeComponent("0");
        segLine.removeComponent("1");
      }
      poiLine.removeComponent("0");
      poiLine.removeComponent("1");
    }
    debuglog('intersectPoint= ',intersectPoint);
    // intégration des points au contour du POI avec memo du nouvel index
    var i=1;
    for (var n=0; n < intersectPoint.length; n++)
    {
      var point = intersectPoint[n].intersect;
      var index = parseInt(intersectPoint[n].index)+i;
      poiLineString.addComponent(point, index);
      intersectPoint[n].newIndex = index;
      i++;
    }
    
    // création des deux nouvelles géométries
    var TabLine1 = [];
    var TabLine2 = [];
    
    var index1 = parseInt(intersectPoint[0].newIndex);
    var index2 = parseInt(intersectPoint[1].newIndex);
    
    for (var n=0; n < parseInt(poiLineString.components.length); n++)
    {
      var x = poiLineString.components[n].x;
      var y = poiLineString.components[n].y;
      var point = new OpenLayers.Geometry.Point(x ,y);
		
      
      if (n < index1){
        TabLine1.push(point);

      }
      if (n == index1){
        TabLine1.push(point);
        TabLine2.push(point);
      }
      if ((index1 < n) && (n < index2)){
        TabLine2.push(point);
      }
      if (n == index2){
        TabLine1.push(point);
        TabLine2.push(point);
      }
      if (index2 < n){
        TabLine1.push(point);
      }
    }
    
    /*
    debuglog('TabLine1['+0+']= ',TabLine1[0]);
    debuglog('TabLine1['+(TabLine1.length-1)+']= ',TabLine1[(TabLine1.length-1)]);
    debuglog('TabLine2['+0+']= ',TabLine2[0]);
    debuglog('TabLine2['+(TabLine2.length-1)+']= ',TabLine2[(TabLine2.length-1)]);
    */
    //debuglog('TabLine1= ',TabLine1);
    //debuglog('TabLine2= ',TabLine2);
    
    var LineString1 = new OpenLayers.Geometry.LinearRing(TabLine1);
    var LineString2 = new OpenLayers.Geometry.LinearRing(TabLine2);
    debuglog('LineString1= ',LineString1);
    debuglog('LineString2= ',LineString2);
    
    poiGeo = new OpenLayers.Geometry.Polygon(LineString1);
    debuglog('poiGeo = ',poiGeo);
            
    wazeModel.actionManager.add(new WazeActionUpdateFeatureGeometry(poi, Waze.model.venues,oldPoiGeo,poiGeo));
    /*
    var stateID=Waze.model.states.top.id;
    var countryID=Waze.model.countries.top.id;
                  
    var newAtts={emptyStreet: 'true', emptyCity: 'true', stateID: stateID, countryID: countryID};
        
    wazeModel.actionManager.add(new WazeActionUpdateFeatureAddress(poi, newAtts , {streetIDField: 'streetID'} ));
    */
    
    // Création du nouveau poi
    clonePoi = new WazefeatureVectorLandmark();
    var clonePoiAttr = clonePoi.attributes;

    clonePoiAttr.adLocked = poi.attributes.adLocked;
    clonePoiAttr.aliases = poi.attributes.aliases;
    clonePoiAttr.approved = poi.attributes.approved;
    clonePoiAttr.categories = poi.attributes.categories;
    clonePoiAttr.description = poi.attributes.description;
    clonePoiAttr.externalProviderIDs = poi.attributes.externalProviderIDs;
    clonePoiAttr.houseNumber = poi.attributes.houseNumber;
    clonePoiAttr.openingHours = poi.attributes.openingHours;
    clonePoiAttr.lockRank = poi.attributes.lockRank;
    clonePoiAttr.name = poi.attributes.name;
    clonePoiAttr.residential = poi.attributes.residential;
    clonePoiAttr.phone = poi.attributes.phone;
    clonePoiAttr.services = poi.attributes.services;
    clonePoiAttr.url = poi.attributes.url;
    //clonePoiAttr.entryExitPoints = poi.attributes.entryExitPoints;
    //clonePoiAttr.images = poi.attributes.images;
    
    //clonePoi.attributes.geometry = new OpenLayers.Geometry.Polygon(LineString2);
    clonePoi.geometry = new OpenLayers.Geometry.Polygon(LineString2);

    debuglog('clonePoi',clonePoi);
    
    wazeModel.actionManager.add(new WazeActionAddLandmark(clonePoi));
    
    // copie du nom et mise à jour du nouveau poi
    
    /*
    var streetName='';
    var street=wazeModel.streets.objects[poi.attributes.streetID];
    if (street.isEmpty==false)
      streetName=street.name;
    
    var cityName='';
    var city=wazeModel.cities.objects[street.cityID];
    
    if (city.isEmpty==false)
      cityName=city.name;
    */

    /*
    var stateID=Waze.model.states.top.id;
    var countryID=Waze.model.countries.top.id;
                  
    var newAtts={emptyStreet: true, emptyCity: true, stateID: stateID, countryID: countryID};
        
    wazeModel.actionManager.add(new WazeActionUpdateFeatureAddress(clonePoi, newAtts , {streetIDField: 'streetID'} ));
    */
    debuglog('wazeModel.actionManager = ',wazeModel.actionManager);

}
    
    
function intersection(D1, D2)
{
    var a,b,c,d,x,y;
    var seg = {}; //{x1, y1, x2, y2};
    var seg1 = {}; //{x1, y1, x2, y2};
    var seg2 = {}; //{x1, y1, x2, y2};
    var options = {};
    options.point = true;
    
    if (D1.components[0].x < D1.components[1].x)
    {
      seg1.x1 = D1.components[0].x;
      seg1.y1 = D1.components[0].y;
      seg1.x2 = D1.components[1].x;
      seg1.y2 = D1.components[1].y;
    }else if (D1.components[0].x > D1.components[1].x)
    {
      seg1.x1 = D1.components[1].x;
      seg1.y1 = D1.components[1].y;
      seg1.x2 = D1.components[0].x;
      seg1.y2 = D1.components[0].y;
    }
    
    if (D2.components[0].x < D2.components[1].x)
    {
      seg2.x1 = D2.components[0].x;
      seg2.y1 = D2.components[0].y;
      seg2.x2 = D2.components[1].x;
      seg2.y2 = D2.components[1].y;
    }else if (D2.components[0].x > D2.components[1].x)
    {
      seg2.x1 = D2.components[1].x;
      seg2.y1 = D2.components[1].y;
      seg2.x2 = D2.components[0].x;
      seg2.y2 = D2.components[0].y;
    }
    return OpenLayers.Geometry.segmentsIntersect(seg1,seg2,options);
          
   
}    


WMESP_bootstrap();