﻿	
	//====================================测量线距离类==========================================
	
	/*
	 * 定义测量线距离类
	 */
	function KPolyLineControl()
    {
        this.loaded = false;
        this.lineOpacity=0.5;					//线透明度
        this.lineColor="blue";					//线颜色
        this.lineWidth=2;						//线宽度
        this.textBackgroundColor="#FFFFD7";		//文本背景色
        this.textBorderLine=1;					//文本边框宽度
        this.textBorderColor="#ADAEAC";			//文本边框颜色
        this.textFontSize=12;					//文本字体大小
        this.textFontColor="#993300";			//文本字体颜色
        this.textOpacity=1;						//文本透明度
    }    
    /*
	 * 初始化
	 */
    var KPolyLineControl_initialize = function(mapObject)
    {
        var controlObject = this;
        if (controlObject.Map && mapObject == controlObject.Map)
        {
            return;
        }
        controlObject.Map = mapObject;
        controlObject.loaded = true;
    }
    
    /*
	 * 开始测量
	 */
    var KPolyLineControl_startup = function()
    {
        var controlObject = this;        
        if (!controlObject.loaded) return;
        
		if (controlObject.Map.currTool!=null)		
        {
			controlObject.Map.currTool.depose();				 
		}
		controlObject.Map.currTool=this;
		controlObject.Map.clearMouseScroll();	//清除鼠标滚动			
		
		
		KBase.setCursorStyle(controlObject.Map.mapsDiv, "pen.cur");
		// 初始化属性 
		controlObject.points = new Array(0);
        controlObject.mapTexts = new Array(0);
        controlObject.polylines = new Array(0);
        controlObject.index = 0;
        
        //鼠标点击事件
        controlObject.mapMouseDownListener = KEvent.addListener(controlObject.Map, "mousedown", controlObject, this.onMapMouseDown);        
        //地图变化事件--重新开始
        controlObject.mapChangeListener = KEvent.addListener(controlObject.Map, "mapload", controlObject, this.startup);        
        
    }
    
    /*
	 * 响应鼠标点击事件
	 */
    var KPolyLineControl_onMapMouseDown = function(x, eventButton)
    {
        var controlObject = this;
        var index=controlObject.index;
        if (!controlObject.points[index])
        {           
            if (eventButton == 1)//左键
            {
                controlObject.points.push(new Array(0));// 新增一个组点
                controlObject.mapTexts.push(new Array(0));    
                
                controlObject.points[index].push(x); 
                //创建文本框               
                var mapText = new KMapText(x);                   
                mapText.setNoWrap(true);
                mapText.setVisible(false);
                mapText.setBgColor(controlObject.textBackgroundColor);
                mapText.setBorderLine(controlObject.textBorderLine);
                mapText.setBorderColor(controlObject.textBorderColor);
                mapText.setFontSize(controlObject.textFontSize);
                mapText.setFontColor(controlObject.textFontColor);
                mapText.setOpacity(controlObject.textOpacity);            
                
                controlObject.Map.addOverLay(mapText);
                controlObject.mapTexts[index].push(mapText); 
                //创建线对象               
                var polyLine=new KPolyLine(controlObject.points[index],controlObject.lineColor,controlObject.lineWidth,controlObject.lineOpacity);                             
                controlObject.Map.addOverLay(polyLine);
                controlObject.polylines.push(polyLine);               
                
                controlObject.lastPoint = x;//设置最后一个点
                
                if (!controlObject.tipText)
                {
                    controlObject.tipText = new KMapText(controlObject.points[controlObject.index][0]);
                    controlObject.tipText.setBgColor("#D2F0FF");
                    controlObject.tipText.setFontSize(12);                    
                    controlObject.tipText.setNoWrap(true);                    
					controlObject.tipText.setText("点击右键结束");
				}
                controlObject.Map.addOverLay(controlObject.tipText);
                                
                //增加地图容器鼠标移动侦听
                controlObject.mapMouseMoveListener = KEvent.addListener(controlObject.Map.container, "mousemove", controlObject, this.onMapMouseMove);        
            }
            
        }
        else
        {
            //经过点
            if (eventButton==1)
            {
                controlObject.points[index].push(x);
                var mapText = new KMapText(x);                 
                mapText.setNoWrap(true);
                mapText.setVisible(false);
                mapText.setBgColor(controlObject.textBackgroundColor);
                mapText.setBorderLine(controlObject.textBorderLine);
                mapText.setBorderColor(controlObject.textBorderColor);
                mapText.setFontSize(controlObject.textFontSize);
                mapText.setFontColor(controlObject.textFontColor);
                mapText.setOpacity(controlObject.textOpacity);
                
                controlObject.Map.addOverLay(mapText);                
                controlObject.mapTexts[index].push(mapText);
                
				controlObject.polylines[index].setPoints(controlObject.points[index]);
				controlObject.lastPoint = x;				
            }            
			else		
			{
                
                controlObject.lastIndex=controlObject.index;//定义上一个次数                
                var message="";
                if (controlObject.points[index].length>1)
                {             
					for (i=0;i<controlObject.points[index].length;i++)
					{
						if (i==0)
							message += controlObject.points[index][i][0] + ";" + controlObject.points[index][i][1];
						else
							message += ";" + controlObject.points[index][i][0] + ";" + controlObject.points[index][i][1];
					}				
					var sendMessage=KBase.createSendXml(this.Map.userId,"PolyLine",message);			
					KRequest.send(this,this.Map.mapCmd,sendMessage,KPolyLineControl_sendMessageEnd);
				}
                //清除移动线
                var points = new Array(0);                
                points.push([0][0]);                
                controlObject.lastPolyline.setPoints(points);
                //移除提示框显示
                controlObject.Map.removeOverLay(controlObject.tipText);
                //删除鼠标移动侦听
                KEvent.removeListener(controlObject.mapMouseMoveListener);
                controlObject.index++;
                controlObject.lastPoint = null;
            }

        }
        
    }
    /*
	 * 响应鼠标移动事件
	 */
    var KPolyLineControl_onMapMouseMove = function(x)
    {        
        var controlObject = this;        
        if (!controlObject.lastPoint)	return;
        
        //创建移动线
        if (!controlObject.lastPolyline)
        {
            controlObject.lastPolyline = new KPolyLine(controlObject.lastPoint, null, 2);
            controlObject.lastPolyline.setLineColor("gray");
            controlObject.Map.addOverLay(controlObject.lastPolyline);             
        }        
        
        var surrPoint=KBase.getEventPosition(x, controlObject.Map.container);
        //设置移动线位置 
		var points = new Array(0); 
        points.push(controlObject.lastPoint);        
        points.push(surrPoint); 
        controlObject.lastPolyline.setPoints(points);
        
        //移动提示框位置
        surrPoint[0]=surrPoint[0]+12;
        surrPoint[1]=surrPoint[1]-12;
        controlObject.tipText.setPoint(surrPoint);
    }   
	
	/*
	 * 响应服务器返回值
	 */
	var KPolyLineControl_sendMessageEnd=function(parameter)
	{		
		var controlObject=this.sendObject;
		var index=controlObject.lastIndex;
		var message=KBase.getMessage(this.request.responseText);	
			
		if (!message.isError)
		{
			for (i=0;i<message.text.length;i++)
			{
				controlObject.mapTexts[index][i].setText(message.text[i]);
				controlObject.mapTexts[index][i].setVisible(true);
			}
		}		
	}
	/**
	 * 获取HTML控件
	 */	
	var KPolyLineControl_getObject = function()
    {
        var controlObject = this;
        return controlObject.div;
    }
    /**
	 * 释放
	 */	
    var KPolyLineControl_depose = function()
    {
        var controlObject = this;        
        if (controlObject.mapMouseDownListener)
        {
            KEvent.removeListener(controlObject.mapMouseDownListener);
        }
        if (controlObject.mapMouseMoveListener)
        {
            KEvent.removeListener(controlObject.mapMouseMoveListener);
        }
        if (controlObject.mapChangeListener)
        {
			KEvent.removeListener(controlObject.mapChangeListener);
        }
        
        //删除线显示
        for (var i = 0; i < controlObject.polylines.length;i++)
        {
			controlObject.Map.removeOverLay(controlObject.polylines[i]);   
			controlObject.polylines[i]=null;
        }
        //删除提示框显示
        for (var i = 0; i < controlObject.mapTexts.length;i++)
        {
			for (var j = 0; j < controlObject.mapTexts[i].length;j++)
			{
				controlObject.Map.removeOverLay(controlObject.mapTexts[i][j]);   
				controlObject.mapTexts[i][j]=null;
			}
        }     
        //删除移动线
        if (controlObject.lastPolyline)
        {
            controlObject.Map.removeOverLay(controlObject.lastPolyline);
            controlObject.lastPolyline = null;
        }
        //删除
        if (controlObject.tipText)
        {
            controlObject.Map.removeOverLay(controlObject.tipText);
            controlObject.tipText = null;
        }
    }    
    
    
    /**
	 * 设置线透明度
	 */	
    var KPolyLineControl_setLineOpacity = function(value)
    {
		this.lineOpacity=value;
    }
    
    /**
	 * 设置线颜色
	 */	
    var KPolyLineControl_setLineColor = function(value)
    {
		this.lineColor=value;
    }
    
    /**
	 * 设置线宽度
	 */	
    var KPolyLineControl_setLineWidth = function(value)
    {
		this.lineWidth=value;
    }
    
    /**
	 * 设置文本背景色
	 */	
    var KPolyLineControl_setTextBgColor = function(value)
    {
		this.textBackgroundColor=value;
    }    
    
    
    /**
	 * 设置文本边框宽度
	 */	
    var KPolyLineControl_setTextBorderLine = function(value)
    {
		this.textBorderLine=value;
    }
    
    /**
	 * 设置文本边框颜色
	 */	
    var KPolyLineControl_setTextBorderColor = function(value)
    {
		this.textBorderColor=value;
    }
    
    /**
	 * 设置文本字体大小
	 */	
    var KPolyLineControl_setTextFontSize = function(value)
    {
		this.textFontSize=value;
    }
    
    /**
	 * 设置文本字体颜色
	 */	
    var KPolyLineControl_setTextFontColor = function(value)
    {
		this.textFontColor=value;
    }
    
    /**
	 * 设置文本透明度
	 */	
    var KPolyLineControl_setTextOpacity = function(value)
    {
		this.textOpacity=value;
    }   
    

    KConfig.defineClass("KPolyLineControl", KPolyLineControl);
    
    KConfig.defineFunction(KPolyLineControl, "startup", KPolyLineControl_startup);
    KConfig.defineFunction(KPolyLineControl, "onMapMouseDown", KPolyLineControl_onMapMouseDown);
    KConfig.defineFunction(KPolyLineControl, "onMapMouseMove", KPolyLineControl_onMapMouseMove);
    KConfig.defineFunction(KPolyLineControl, "initialize", KPolyLineControl_initialize);
    KConfig.defineFunction(KPolyLineControl, "getObject", KPolyLineControl_getObject);
    KConfig.defineFunction(KPolyLineControl, "depose", KPolyLineControl_depose);  
    
        
    KConfig.defineFunction(KPolyLineControl, "setLineOpacity", KPolyLineControl_setLineOpacity); 
    KConfig.defineFunction(KPolyLineControl, "setLineColor", KPolyLineControl_setLineColor); 
    KConfig.defineFunction(KPolyLineControl, "setLineWidth", KPolyLineControl_setLineWidth); 
    KConfig.defineFunction(KPolyLineControl, "setTextBgColor", KPolyLineControl_setTextBgColor); 
    KConfig.defineFunction(KPolyLineControl, "setTextBorderLine", KPolyLineControl_setTextBorderLine); 
    KConfig.defineFunction(KPolyLineControl, "setTextBorderColor", KPolyLineControl_setTextBorderColor);
    KConfig.defineFunction(KPolyLineControl, "setTextFontSize", KPolyLineControl_setTextFontSize); 
    KConfig.defineFunction(KPolyLineControl, "setTextFontColor", KPolyLineControl_setTextFontColor);
    KConfig.defineFunction(KPolyLineControl, "setTextOpacity", KPolyLineControl_setTextOpacity);
    
    //=================================测量线距离类[END]==========================================