openplayers google地图 ,把简单的东西放到一块

/*
 *    地图容器初始化
 */

function googleMap() {
    this.targer = 'mapDiv';
    // var googleLayer; //加载的Google图层
    this.projection = ol.proj.get('EPSG:3857');
    this.defaultPoint = [116.14149525215394,40.138918953133015];
    // 坐标转换
    this.geom3857To4326 = function(geom) {
        return ol.proj.transform(geom, 'EPSG:3857', 'EPSG:4326');
    };
    this.geom4326To3857 = function(geom) {
        return ol.proj.transform(geom, 'EPSG:4326', 'EPSG:3857');
    };
    /*
     * 根据图层类型加载Google地图
     */
    this.loadGoogleMap = function(mapType) {
        var googleLayer = null;
        switch (mapType) {
        case "terrain": // 地形
            googleLayer = new ol.layer.GoogleMapLayer({
                layerType : ol.source.GoogleLayerType.TERRAIN
            });
            googleLayer.setVisible(false);
            googleLayer.TYPE="TERRAIN";
            break;
        case "vector": // 矢量
            googleLayer = new ol.layer.GoogleMapLayer({
                layerType : ol.source.GoogleLayerType.VEC
            });
            googleLayer.TYPE="VEC";
            googleLayer.setVisible(false);
            break;
        case "raster": // 影像
            googleLayer = new ol.layer.GoogleMapLayer({
                layerType : ol.source.GoogleLayerType.RASTER
            });
            googleLayer.setVisible(true);
            googleLayer.TYPE="RASTER";
            break;
        case "road": // 道路
            googleLayer = new ol.layer.GoogleMapLayer({
                layerType : ol.source.GoogleLayerType.ROAD
            });
            googleLayer.setVisible(true);
            googleLayer.TYPE="ROAD";
        default:
        }
        googleLayer.TYPENAME="GOOGLEBASEMAP";
        // map.addLayer(googleLayer); // 添加Google地图图层
        return googleLayer;
    };
    // 初始化Google图层
    //地形图
    this.rasterGoogleLayer = this.loadGoogleMap("raster");
    /*this.rasterGoogleLayer = new ol.layer.GoogleMapLayer({
        layerType : ol.source.GoogleLayerType.RASTER
    });*/
    //交通图
    this.roadGoogleLayer = this.loadGoogleMap("road");
    /*this.roadGoogleLayer = new ol.layer.GoogleMapLayer({
        layerType : ol.source.GoogleLayerType.ROAD
    });*/
    //矢量图
    this.terrainGoogleLayer = this.loadGoogleMap("terrain");
    /*this.terrainGoogleLayer = new ol.layer.GoogleMapLayer({
        layerType : ol.source.GoogleLayerType.TERRAIN
    });*/
    // 矢量
    this.vecGoogleLayer = this.loadGoogleMap("vector");
    /*this.vecGoogleLayer = new ol.layer.GoogleMapLayer({
        layerType : ol.source.GoogleLayerType.VEC
    }); */
     
/*    this.sss =  new ol.layer.Tile({
        source: new ol.source.XYZ({
            url:'http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i345013117!3m8!2szh-CN!3scn!5e1105!12m4!1e68!2m2!1sset!2sRoadmap!4e0'
        })
    });*/
    this.createMap = function(json) {
        var mapcenter = (json.center==null||json.center==undefined)? this.defaultPoint:json.center;
        mapcenter = ol.proj.transform(mapcenter, 'EPSG:4326', 'EPSG:3857')
        console.log(mapcenter);
        // 初始化地图容器
        // alert("初始化地图容器");
        var map = new ol.Map({
            //layers : [ this.sss ],
            layers : [ this.rasterGoogleLayer,this.terrainGoogleLayer,this.vecGoogleLayer, this.roadGoogleLayer ],
            controls : ol.control.defaults({
                attribution : false,
                zoom : true,
                rotate : false 
                
            })//.extend([ new ol.control.ScaleLine(),new ol.control.ZoomSlider() ]),
             .extend([ 
                // new ol.control.Attribution(),
                // new  ol.control.FullScreen(),// 全屏 
                 new ol.control.MousePosition({
                     projection:ol.proj.get('EPSG:4326'),
                     coordinateFormat: ol.coordinate.createStringXY(4)
                 }),// 鼠标位置 //
                // new ol.control.OverviewMap(),// 缩略图 
                 new ol.control.Rotate(),
                 new ol.control.ScaleLine(),// 比例尺 
                 //new ol.control.Zoom(),
                 //new ol.control.ZoomSlider(),// 缩放滚动条 
                // new ol.control.ZoomToExtent() 
                 ]),
             /// 缩放到范围
            target : json.mapId, // 地图容器div的ID
            logo : false,
            view : new ol.View({
                projection : this.projection, // 投影坐标系
                // 设置地图中心范围 
                  extent : [ 6900000.00, 0,
                  18000000, 9000000 ], 
                  
                center : mapcenter,
                zoom : 16,
                // 限制地图缩放最大级别为14,最小级别为10
                // minZoom : 10,
                minZoom : 4,
                maxZoom : 20
            }),
        });
         console.log(map.getView().getCenter());
        // 鼠标监听事件
        /*
         * var key = map.on('singleclick', function(event){ console.log(event); //
         * 下面这行代码就是取消事件监听 //map.unByKey(key); })
         */
         map.on('pointermove', function(event) {
            // $("#tpoint").html(); //
             //console.log(JSON.stringify(ol.proj.transform(event.coordinate, 'EPSG:3857', 'EPSG:4326')));
         
        });
        
        map.on('singleclick', function(event) {
            //console.log(JSON.stringify(ol.proj.transform(event.coordinate, 'EPSG:3857', 'EPSG:4326'))); //
             
         
        }); 
         
        
        return map;
    };
    
    
    // 创建 VectorLayer
    this.createVectorLayer = function() {
        var layer = new ol.layer.Vector({
            source : new ol.source.Vector() 
             
        });
         
        return layer;
    };
    // 地图 飞行定位
    this.flymove = function(map, point) {
        if(point == null || point == undefined) point = this.defaultPoint;
        var duration = 2000; // 持续时间(毫秒)
        var view = map.getView();
        view.animate({
              center: point,
              duration: 2000
        });
        //view.setCenter(JSON.parse(point)); // 定位
    };
    // 地图 飞行定位
    this.move = function(map, point) {
        if(point == null || point == undefined) point = this.defaultPoint;
        var duration = 2000; // 持续时间(毫秒)
        var view = map.getView();
        var start = +new Date();
        // 移动效果
        var pan = ol.animation.pan({
            duration : duration, // 设置持续时间
            source : /** @type {ol.Coordinate} */
            (view.getCenter()),
            start : start
        });
        // 反弹效果
        var bounce = ol.animation.bounce({
            duration : duration, // 设置持续时间
            resolution : 2 * view.getResolution(), // 4倍分辨率
            start : start
        });
        map.beforeRender(pan, bounce); // 地图渲染前设置动画效果(pan+bounce)
        view.setCenter(JSON.parse(point)); // 定位
    };
     
    // 加载面
    this.setPolygonLayerFeatures = function(layer, areaList ,style ,option) {
        if (areaList == undefined || areaList.length == 0)
            return false;
        var featureArr = [];
        for (var i = 0; i < areaList.length; i++) {
            try {
                var obj = areaList[i];
                var geom = eval(obj.geom);
            /*    var g = [geom];
                geom = this.geom4326To3857(g);*/
                var feature = new ol.Feature({
                    geometry : new ol.geom.Polygon(geom) 
                     
                }); 
                feature.getGeometry().transform('EPSG:4326','EPSG:3857');
                //var s = feature.getGeometry().transform('EPSG:4326','EPSG:3857').getCoordinates()[0];
                feature.setStyle(style);
             
                feature.entity = obj;
                feature.setId(obj.id);
                if(option!=undefined && option!=null){
                    if(option.type!=undefined) feature.TYPE = option.type;
                }
                
                featureArr.push(feature);
            } catch (e) {
                console.log(e);
            }
        }
        // 添加面
 
        layer.getSource().addFeatures(featureArr);
        // map.render();
    };
    // 绘画管线
    this.setlineLayerFeatures = function(layer, lineList , style ,option) {
        if (lineList == undefined || lineList.length == 0)
            return false;
        var featureArr = [];
         
        for (var i = 0; i < lineList.length; i++) {
            try {
                var obj = lineList[i];
                var geom = eval(obj.geom);
             
                var feature = new ol.Feature({
                    geometry : new ol.geom.LineString(geom),
                    name : obj.orgName
                });
                feature.getGeometry().transform('EPSG:4326','EPSG:3857');
                feature.setStyle(style);
                feature.entity = obj;
                feature.setId(obj.id);
                if(option!=undefined && option!=null){
                    if(option.type!=undefined) feature.TYPE = option.type;
                }
                featureArr.push(feature);
            } catch (e) {
                console.log(e);
            }

        }
        // 添加面
        console.log(featureArr);
        layer.getSource().addFeatures(featureArr);
        // map.render();
    };
     
     
    // 加载点坐标
    this.setPointLayerFeatures = function(  layer,pointList, style ,option) {
        if (pointList == undefined || pointList.length == 0)
            return false; 
        var featureArray = [];
        for (var i = 0; i < pointList.length; i++) {
            try {
                var obj = pointList[i];
              
                if(obj.geom==null)obj.geom= JSON.stringify(this.defaultPoint);
                var labelCoords = eval(obj.geom);
                var feature = new ol.Feature({
                    geometry : new ol.geom.Point(labelCoords), //
                    labelPoint : new ol.geom.Point(labelCoords),
                    name : obj.unitname
                });
    /*            style.setText(new ol.style.Text({
                    text : obj.unitname,
                    fill : new ol.style.Fill({
                        color : 'white'
                    }),
                    font : '16px 微软雅黑,sans-serif'
                }));*/
                feature.getGeometry().transform('EPSG:4326','EPSG:3857');
                feature.setStyle(function(resolution) {
                    return [ style ]
                });
                feature.setId(obj.id);
             
                feature.entity = obj;
                if(option!=undefined && option!=null){
                    if(option.type!=undefined) feature.TYPE = option.type;
                }
                featureArray.push(feature);
            } catch (e) {
                console.log(e);
            }
        }
        layer.getSource().addFeatures(featureArray);
         
    };

     
    // 打开弹窗
    this.getPopup = function(dom) {
        var popup = new ol.Overlay({
            element : dom,
            positioning : 'bottom-center'
        });
        return popup;
    };

    // 创建选中项控件,
    this.getSelect = function() {
        // 初始化一个交互选择控件,并添加到地图容器中
        var select = new ol.interaction.Select();
        return select;
    };
    // 创建交互编辑控件,
    this.getModify = function(select) {
        // 初始化一个交互编辑控件,并添加到地图容器中
        return new ol.interaction.Modify({
            features : select.getFeatures()
        // 选中的要素
        });
    };
     
    // gis 地图 可编辑 和选择 当前 不能使用 . 需要激活
    this.modifySelectActive = function(map) {
        map.gisSelect = this.getSelect();
        map.gisModify = this.getModify(map.gisSelect);
        map.addInteraction(map.gisSelect);
        map.addInteraction(map.gisModify);
    }

};
 

// 定义修改几何图形功能控件
var Modify = {
    init : function() {
        // 初始化一个交互选择控件,并添加到地图容器中
        this.select = new ol.interaction.Select();
        map.addInteraction(this.select);
        // 初始化一个交互编辑控件,并添加到地图容器中
        this.modify = new ol.interaction.Modify({
            features : this.select.getFeatures()
        // 选中的要素
        });
        map.addInteraction(this.modify);
        // 设置几何图形变更的处理
        this.setEvents();
    },
    setEvents : function() {
        var selectedFeatures = this.select.getFeatures(); // 选中的要素
        // 添加选中要素变更事件
        this.select.on('change:active',
                function() {
                    selectedFeatures.forEach(selectedFeatures.remove,
                            selectedFeatures);
                });
    },
    setActive : function(active) {
        this.select.setActive(active);// 激活选择要素控件
        this.modify.setActive(active);// 激活修改要素控件
    }
};
/*
 * Modify.init(); //初始化几何图形修改控件 Modify.setActive(true); //激活几何图形修改控件;
 */


 

转载于:https://my.oschina.net/yangcaoling/blog/1594747

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值