/*
* 地图容器初始化
*/
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); //激活几何图形修改控件;
*/