基于OpenLayers的地图封装Javascript类定义



基于OpenLayers的地图封装Javascript类定义

MapCwgisClass.js

//web地图封装类
//MapCwgisClass类的定义
//vp:hsg,myk
//create date:2013-07-26
//类 原型定义
var Person = function () {
    this.m_Name = "good";
}
Person.prototype = {
    m_Name: '',
    getName: function () {
        return this.m_Name;
    }
}
//类 原型定义
var MapCwgisClass=function()
{
        //OpenLayers环境参数
        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
        OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;
        OpenLayers.INCHES_PER_UNIT["千米"] = OpenLayers.INCHES_PER_UNIT["km"];
        OpenLayers.INCHES_PER_UNIT["米"] = OpenLayers.INCHES_PER_UNIT["m"];
        OpenLayers.INCHES_PER_UNIT["英里"] = OpenLayers.INCHES_PER_UNIT["mi"];
        OpenLayers.INCHES_PER_UNIT["英寸"] = OpenLayers.INCHES_PER_UNIT["ft"];
        this.defaultFormat = 'image/png';
        //
        this.map=null;                      
}
MapCwgisClass.prototype={
    //属性
    wms_url:null,
    wms_url_getFeature:null,
    map_divid:null,
    map: null,
    currentClientPoint: null,
    currentClientMapPoint:null,
    m_CurrentTool:null,    
    ProxyHost:null,
    defaultFormat:null,
    defaultProjection:null,
    defaultBounds:null,
    vlayer_drawFeature:null,
    layer_Highlight:null,
    LayerList:null,
    //自定义的wms图层属性
    map_Raster:null,
    map_Cadastra:null,
    //
    //图层名称
    layer_DOM: "RFS_DOM",       //DOM层名;
    layer_XZQ: "RFS_XZQ",       //行政区层名
    layer_DX : "RFS_MZDW",        //其他地类层名
    layer_ZD : "RFS_CBD_ZD",    //宗地层名
    //新添加图层
    layer_ZD_LS:"RFS_CBD_LS",   //地块历鸣图层名称
    //方法    
    //初始化地图方法
    init:function()
    {    
        //OpenLayers.ProxyHost = 'GeoServerProxy.aspx?URL=';
        OpenLayers.ProxyHost =this.ProxyHost;	
        //
        //默认参数
        this.defaultProjection = "EPSG:2358";
        this.defaultBounds = new OpenLayers.Bounds(
            34602000.15, 3318000.3500000006,
            34609999.65, 3326999.8500000006);
	    var bounds = this.defaultBounds;
        //选项
	    var options = {
		    controls: [], //若添加编辑框就在[]中加上 new OpenLayers.Control.EditingToolbar(vlayer)
		    maxExtent: bounds,
		    maxResolution: 35.154296875,
		    projection: this.defaultProjection,
		    units: 'm',
		    allOverlays: false        //true代表允许叠加显示图层
	    };
        //初始化地图对象
	    this.map = new OpenLayers.Map(this.map_divid, options);
        map=this.map;  //给全局变量map赋值
        mapWrap = this; //给全局变量赋值 
        var t_LLPoint=new OpenLayers.LonLat(0, 0);
	    //this.setCenterPoint(t_LLPoint, 3);
        //放大到指定范围地图
	    //this.map.zoomToExtent(bounds);
        //    
	}, 
    setCenterPoint:function(openLayerLonLatPoint,Level)
    {
        if(this.map!=null)
        {
            this.map.setCenter(openLayerLonLatPoint,Level); 
        }
    },
    //创建wms图层
    createLayerWms:function(p_mapName,p_wms_url,p_layers)
    {
         var t_mapLayer = new OpenLayers.Layer.WMS(
                    p_mapName, p_wms_url,
				    {
					    layers: p_layers,
					    styles: '',
					    tiled: true,
					    srs: defaultProjection,
					    format: defaultFormat
				    },
				    {
					    singleTile: true, ratio: 1
				    }
        );
        return t_mapLayer;
    },
    //创建Vector图层
    createLayerVector:function(p_LayerName)
    {
        var t_layer_vector = new OpenLayers.Layer.Vector(p_LayerName);
        return t_layer_vector;
    },
    //创建查询图层
    createLayerQuery:function(p_QueryLayerName)
    {
        var t_querylayerName='查询图层';
        if(p_QueryLayerName!=null && p_QueryLayerName!="")
        {
            t_querylayerName=p_QueryLayerName;
        }
        var t_styleMap=new OpenLayers.StyleMap({ 
			    "default": {
				    strokeColor: "#FF0000",
				    strokeOpacity: 1,
				    fillColor: "#6699ff",
				    fillOpacity: 0.2
			    }
		    });
        var t_layer_Query = new OpenLayers.Layer.Vector(t_querylayerName, t_styleMap);
        return t_layer_Query;
    },
    //添加图层
    addLayer:function(pLayer)
    {
        if(this.map!=null)
        {
            this.map.addLayers([pLayer]);
        }
    },
    //添加图层集
    addLayers:function(pLayers)
    {
        if(this.map!=null)
        {
            this.map.addLayers([pLayers]);
        }
    },
    //添加地图系统常用工具控件
    //添加系统命令  控件 OK
    addSystemCommands:function()
    {
        //	this.map.addControl(new OpenLayers.Control.LayerSwitcher());
            //添加比例尺线
            var t_scaleline=new OpenLayers.Control.ScaleLine({ topOutUnits: "千米",
		        topInUnits: "米", bottomOutUnits: "英里", bottomInUnits: "英寸"
	        });t_scaleline.setMap(this.map);            
	        this.map.addControl(t_scaleline);
            //添加比例尺
            var t_scale=new OpenLayers.Control.Scale();t_scale.setMap(this.map);
	        this.map.addControl(t_scale);
            //添加鼠标点
            var t_mouseposition=new OpenLayers.Control.MousePosition();
            t_mouseposition.setMap(this.map);
	        this.map.addControl(t_mouseposition);
            //添加鹰眼图
            var t_ovmap=new OpenLayers.Control.LTOverviewMap();
            t_ovmap.setMap(this.map);
	        this.map.addControl(t_ovmap);
            //添加Zomm动画
            var t_zommAnimation=new OpenLayers.Control.LTZommAnimation();
            t_zommAnimation.setMap(this.map);
	        this.map.addControl(t_zommAnimation);
            //添加平移缩放条
            var t_panZoomBar=new OpenLayers.Control.PanZoomBar({
		        position: new OpenLayers.Pixel(2, 15)
	        });
            t_panZoomBar.setMap(this.map);
	        this.map.addControl(t_panZoomBar);
            //添加导航
            var t_navigation=new OpenLayers.Control.Navigation();
            t_navigation.setMap(this.map);
	        this.map.addControl(t_navigation);
    },
    addSystemCommands_normal:function()
    {
           //添加鼠标点
            var t_mouseposition=new OpenLayers.Control.MousePosition();
            t_mouseposition.setMap(this.map);
	        this.map.addControl(t_mouseposition);
            //添加Zomm动画
            var t_zommAnimation=new OpenLayers.Control.LTZommAnimation();
            t_zommAnimation.setMap(this.map);
	        this.map.addControl(t_zommAnimation);            
    },
    //添加测量命令  控件
    addMeasureCommands:function()
    {
	    //测量控制操作 
	    var sketchSymbolizers = {
		        "Point": {
			        graphicName: "cross",
			        graphicHeight: 8,
			        graphicWidth: 8,
			        fillColor: "#FF0000",
			        fillOpacity: 1,
			        strokeWidth: 0,
		        },
		        "Line": {
			        strokeWidth: 1.5,
			        strokeOpacity: 1,
			        strokeColor: "#0000FF"
		        },
		        "Polygon": {
			        strokeWidth: 1.5,
			        strokeOpacity: 1,
			        strokeColor: "#0000FF",
			        fillColor: "#ccccff",
			        fillOpacity: 0.3
		        }
	    };

	    var style = new OpenLayers.Style();
	    style.addRules([new OpenLayers.Rule({ symbolizer: sketchSymbolizers })]);
	    var styleMap = new OpenLayers.StyleMap({ "default": style });

	    var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
	    renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;

	    var options = {
		    persist: true,
		    handlerOptions: {
			    style: "default",
			    layerOptions: {
				    renderers: renderer,
				    styleMap: styleMap
			    }
		    }
	    };
        //线,面测量
	    measureControls = {
		    line: new OpenLayers.Control.Measure(OpenLayers.Handler.Path, options),
		    polygon: new OpenLayers.Control.Measure(OpenLayers.Handler.Polygon, options)
	    };

	    var control;
	    for (var key in measureControls)
	    {
		    control = measureControls[key];
		    control.events.on({
			    "measure": handleMeasure,    //测量距离完成的时候
			    "measurepartial": handleMeasurePartial   //测量距离加入一个点的时候
		    });
		    this.map.addControl(control);
            this.LayerList.add(control);
	    }
    },
    //添加绘制要素的命令  点,线,面
    addDrawFeatureCommands:function()
    {
	    this.vlayer_drawFeature = new OpenLayers.Layer.Vector();
	    this.map.addLayer(vlayer_drawFeature);
	    drawControls = {
		    point: new OpenLayers.Control.DrawFeature(
			    this.vlayer_drawFeature, OpenLayers.Handler.Point),
		    line: new OpenLayers.Control.DrawFeature(
			    this.vlayer_drawFeature, OpenLayers.Handler.Path),
		    polygon: new OpenLayers.Control.DrawFeature(
			    this.vlayer_drawFeature, OpenLayers.Handler.Polygon)
	    };
	    for (var key in drawControls)
	    {
		    this.map.addControl(drawControls[key]);
            this.LayerList.add(drawControls[key]);
	    }
    },
    //添加面板
    addPanel:function()
    {
	    var panel = new OpenLayers.Control.Panel();
	    this.map.addControls(panel);
	    addPanelControls = {
		    zoomBox: new OpenLayers.Control.ZoomBox()
	    };
	    for (var key in addPanelControls)
	    {
		    this.map.addControl(addPanelControls[key]);        
	    }
    },
    //缩放到要素
    zoomToFeatures:function(features)
    {
        if(features==null||features=='undefined') return;
	    var left=0;
	    var top=0;
	    var right=0;
	    var bottom=0;
        //
	    for(i=0;i<features.length;i++)
	    {
		    var fea = features[i];
            if(fea.geometry!=null)
            {
		        var geoBound = fea.geometry.getBounds();
		        if(geoBound.left<left || left==0)
			        left = geoBound.left;
		        if(geoBound.top>top || top==0)
			        top = geoBound.top;
		        if(geoBound.right>right ||right==0)
			        right = geoBound.right;
		        if(geoBound.bottom<bottom||bottom==0)
			        bottom =geoBound.bottom;
            }
	    }
	    var zoomBounds = new OpenLayers.Bounds(
            left, bottom,
            right, top);

	    this.map.zoomTo(7);
        var t_LLpoint=this.getFeatureCenterLonLat(features[0]);
	    this.map.panTo(t_LLpoint);
    },
    //////////////////////////
    //统一获取要素中心点函数//
    //////////////////////////
    getFeatureCenterLonLat:function (fea){
        if(fea==null||fea=='undefined')
        { 
             return null;
        }
	    var bound = fea.geometry.getBounds();
	    var lon = (parseFloat(bound.right) - parseFloat(bound.left)) / 2 + parseFloat(bound.left);
	    var lat = (parseFloat(bound.top ) - parseFloat(bound.bottom)) / 2 + parseFloat(bound.bottom);
	    var lonlat = new OpenLayers.LonLat(lon,lat);
	    return lonlat;
    },/**/
    //长度单位、面积单位汉化
    UnitsToCHS:function (units)
    {
	    var unitsCHS = units;
	    switch (units.toLowerCase())
	    {
		    case "m":
			    unitsCHS = "米";
			    break;
		    case "km":
			    unitsCHS = "千米";
			    break;
	    }
	    return unitsCHS;
    },
    //当前正在执行的工具
    getCurrentTool:function()  
    {
         return m_CurrentTool;
    },
    setCurrentTool:function(p_tool)
    {
         if(m_CurrentTool!=null)
         {
             try
             {
                m_CurrentTool.deactivate();
             }
             catch(e){}
         }
         m_CurrentTool=p_tool;
         try
         {
            m_CurrentTool.activate();
         }
         catch(e){}         
    }, 
    CLASS_NAME: "MapCwgisClass"
};
//设置全局变量和初始化地图控件
//============================================================        
var t_p = new Person();
var t_t=t_p.getName();
//定义全局变量
var map=null;
var mapWrap=null;
//页面地图加载  //给全局变量赋值      
mapWrap = new MapCwgisClass();
mapWrap.wms_url = wms_url;
mapWrap.wms_url_getFeature = wms_url_getFeature;
mapWrap.map_divid = 'map';
mapWrap.ProxyHost = 'GeoServerProxy.aspx?URL=';
mapWrap.init();
mapWrap.addSystemCommands();  //加载常用的系统功能  
//============================================================  

转载自:https://blog.csdn.net/hsg77/article/details/22331681

You may also like...