WME Split POI

Split POI with a new seg

当前为 2015-12-06 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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/*
// @icon            data:image/png;base64,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
// @author          seb-d59
// @version	        1.2
// @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 + "\nPlus de copie de l'adresse du POI pour cause de bug en frontière de Département/Pays.\nVeuillez contrôler et modifier les Départements et Pays des deux nouveaux Poi.\nDans le cas contraire, vous risquez d'en perdre un des deux.",
	en: "Update WME Split POI: v" + WMESP_Version + "\nNo more copy of POI's address due to bug in border of Department/country.\nPlease check and modify the two Poi new countries and departments.\nOtherwise, you might lose one of them."
	};

/* 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();