用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - javascript代码库

WEB_GIS

2014-02-18 作者: ooP举报

[javascript]代码库

// 地图
var map;
// 区县行政区划底图
var basic;
// 乡区划图
var basic_xiang;
// 铁路
var tielu;
// 国道
var guodao;
// 省道
var shengdao;
// 主干道
var zhugandao;
// 炮站图层
var point;
// geoserver部署服务的路径,如:http://localhost:8081/geoserver/wms
var url = gisurl;
// geowebcache路径
var gwc_url = gwcurl;
// 返回数据的格式
var format = 'image/png';
// 区县底图
var cd_poly = 'cd_gis:quxianxzqhA';
// 乡区划图
var cd_poly_xiang = 'cd_gis:xiangxzqhA';
// 铁路
var cd_line_tielu = 'cd_gis:tieluL';
// 国道
var cd_guodao = 'cd_gis:guodaoA';
// 省道
var cd_shengdao = 'cd_gis:shengdaoA';
// 主干道
var cd_zhugandao = 'cd_gis:zhugandaoA';
// 作业点
var cd_point = 'cd_gis:sys_station_info';
// 地图控制器
var controls;
// 弹出框
var popup = null;
// 记录点击事件
var event_public = null;
// 记录点击的经纬度
var lonLat;

/**
 * 设置mapDIV的宽高自适应
 */
function getwidthheight() {
	$("#map").css({
		width : '100%',
		height : '95%',
	});
}

function init() {
	// 启用代理,path为http://localhost:8080/cdweather
	OpenLayers.ProxyHost = path + "/cgi/proxy.cgi?url=";
	//getwidthheight();
	// 创建底图图层
	basic = new OpenLayers.Layer.WMS("市县边界", gwc_url, {
		layers : 'cd_gis:quxianxzqhA',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		isBaseLayer : true
	});
	// 创建乡区划图图层
	basic_xiang = new OpenLayers.Layer.WMS("乡镇边界", gwc_url, {
		layers : 'cd_gis:xiangxzqhA',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		visibility : false,
		isBaseLayer : false
	});
	// 创建铁路图层
	tielu = new OpenLayers.Layer.WMS("铁路", gwc_url, {
		layers : 'cd_gis:tieluL',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		visibility : false,
		isBaseLayer : false
	});
	// 创建国道图层
	guodao = new OpenLayers.Layer.WMS("国道", gwc_url, {
		layers : 'cd_gis:guodaoA',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		visibility : false,
		isBaseLayer : false
	});
	// 创建省道图层
	shengdao = new OpenLayers.Layer.WMS("省道", gwc_url, {
		layers : 'cd_gis:shengdaoA',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		visibility : false,
		isBaseLayer : false
	});
	// 创建主干道图层
	zhugandao = new OpenLayers.Layer.WMS("主干道", gwc_url, {
		layers : 'cd_gis:zhugandaoA',
		transparent : 'TRUE',
		format : 'image/png'
	}, {
		tileSize : new OpenLayers.Size(256, 256),
		visibility : false,
		isBaseLayer : false
	});
	// 创建站点图层
	point = new OpenLayers.Layer.WMS("炮站", url, {
		LAYERS : cd_point,
		transparent : 'TRUE',
		format : format
	}, {
		displayInLayerSwitcher : false,
		singleTile : true,
		isBaseLayer : false
	});
	// 创建高亮矢量图层
	highlightLayer = new OpenLayers.Layer.Vector("Highlighted Features", {
		displayInLayerSwitcher : false,
		isBaseLayer : false
	});

	// 成都界限
	var bounds = new OpenLayers.Bounds(103.02255, 30.096338, 104.89183,
			31.444862);
	// 设置参数
	var options = {
		resolutions : [ 0.0054931640625, 0.00274658203125, 0.001373291015625,
				6.866455078125E-4, 3.4332275390625E-4, 1.71661376953125E-4,
				8.58306884765625E-5, 4.291534423828125E-5,
				2.1457672119140625E-5, 1.0728836059570312E-5 ],
		projection : new OpenLayers.Projection('EPSG:4326'),
		maxExtent : new OpenLayers.Bounds(-180.0, -90.0, 180.0, 90.0),
		units : "degrees",
		controls : []
	};
	// 创建地图,'map'是指定页面的div, options: 地图设置的参数
	map = new OpenLayers.Map('map', options);
	// 加入图层
	map.addLayers([ basic, basic_xiang, tielu, guodao, shengdao, zhugandao,
			point, highlightLayer ]);

	// 地图控制放大缩小移动的工具条
	map.addControl(new OpenLayers.Control.PanZoomBar({
		position : new OpenLayers.Pixel(2, 15)
	}));
	// 图层控制工具
	map.addControl(new OpenLayers.Control.LayerSwitcher());
	// 地图导航工具
	map.addControl(new OpenLayers.Control.Navigation());
	map.zoomToExtent(bounds);

	// 获取图层的信息
	var info_control = new OpenLayers.Control.WMSGetFeatureInfo(
			{
				url : url,
				title : 'Identify features by hovering',
				queryVisible : true,
				infoFormat : 'application/vnd.ogc.gml',
				hover : true,
				layers : [ point ],
				cql_filter : device_type = 1,
				eventListeners : {
					getfeatureinfo : function(event) {
						// 站点图层刷新,解决状态不同步问题
						point.redraw(true);
						if (event_public != null) {
							// 判断鼠标位置,解决IE不停刷新问题
							if (event_public.xy.x == event.xy.x && event_public.xy.y == event.xy.y) {
								return;
							}
						}
						event_public = event;
						// 判断是否点击了站点
						if (event.features.length <= 0) {
							return;
						}
						if (popup != null) {
							dehighLight();
							map.removePopup(popup);
						}
						var data = event.features[0].attributes;
						if(document.getElementById(data.device_type).checked == false) {
							return;
						}
						// 记录站点的经纬度
						lonLat = new OpenLayers.LonLat(data.longitude,
								data.latitude);
						var xy = map.getPixelFromLonLat(lonLat);
						var url = path + "/gunGis/selectByCode.do?code="
								+ data.s_code;
						$
								.ajax({
									type : 'post',
									url : url,
									success : function(data) {
										var obj = eval('(' + data + ')');
										if (!obj.success) {
											return;
										}
										var station = obj.obj;
										var html = "<span style='color:#0088BB;font-weight:bold;font-size: 13px;'>● 基本信息:</span><br/>"
												+ "<table class='tb2'>"
												+ "<tr><th style='text-align: right; width:80px'>站点编码:</th><td style='width:100px'>"
												+ station.sCode
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>站点名称:</th><td>"
												+ station.sName
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>站点类型:</th><td>"
												+ station.deviceType
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>所属地区:</th><td>"
												+ station.deptId
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>经度:</th><td>"
												+ station.longitude
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>纬度:</th><td>"
												+ station.latitude
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>海拔高度:</th><td>"
												+ (station.altitude == null
														|| station.altitude == '' ? '/'
														: station.altitude)
												+ "</td></tr>"
												+ "<tr><th style='text-align: right;'>在线状态:</th><td>"
												+ (station.isOnline == '1' ? '在线'
														: '离线')
												+ "</td></tr>"
												+ "</table>"
												+ '<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
												+ '<a href="javascript:void(0);" onclick = "'
												+ "showMesg('"
												+ station.sCode
												+ "');" + '">查看更多...</a>';
										highLight(event);
										popup = new OpenLayers.Popup.FramedCloud(
												"info",
												map.getLonLatFromPixel(xy),
												null, html, null, true, function(event) {
													this.hide();
													dehighLight();
												});
										map.addPopup(popup);
									}
								});
					}
				}
			});
	map.addControl(info_control);
	info_control.activate();
	// 地图控制器
	controls = {
		point : new OpenLayers.Control.SLDSelect(OpenLayers.Handler.Click, {
			displayClass : 'olControlSLDSelectPoint',
			layers : [ point ],
			selectionSymbolizer : {
				'Point' : {
					graphicName : 'circle',
					strokeColor : '#3F48CC',
					strokeWidth : 2,
					fillColor : '#3F48CC',
					fillOpacity : '0',
					pointRadius : 6
				}
			}
		})
	};
	for ( var key in controls) {
		map.addControl(controls[key]);
	}
	//controls['point'].activate();
	updateIsOnline();
	// 获取地图配置信息,并初始化
	geGisInfo();
}

/**
 * 高亮显示
 */
function highLight(event) {
	if (event.features && event.features.length) {
		highlightLayer.destroyFeatures();
		highlightLayer.addFeatures(event.features);
		highlightLayer.redraw();
	}
}

/**
 * 取消高亮显示
 */
function dehighLight() {
		highlightLayer.destroyFeatures();
		highlightLayer.redraw();
}

// 显示更多信息
function showMesg(operateId) {
	var url = path + "/gunGis/selectByOperateId.do?operateId=" + operateId;
	$
			.ajax({
				type : 'post',
				url : url,
				success : function(data) {
					var html = null;
					var obj = eval('(' + data + ')');
					if (!obj.success) {
						html = "<span style='color:#0088BB;font-weight:bold;font-size: 13px;'>"
								+ obj.msg + "</span>";
					} else {
						var boot = obj.obj;
						html = "<span style='color:#0088BB;font-weight:bold;font-size: 13px;'>● 其它信息:</span><br/><table class='tb2'><tr><th style='text-align: right; width:98px'>站点编码:</th><td style='width:120px'>"
								+ boot.operateId
								+ "</td></tr><tr><th style='text-align: right;'>设备编号:</th><td>"
								+ boot.equId
								+ "</td></tr><tr><th style='text-align: right;'>手机号码:</th><td>"
								+ boot.phoneNo
								+ "</td></tr><tr><th style='text-align: right;'>方位角模块电量:</th><td>"
								+ boot.azimuthElecBalance
								+ "</td></tr><tr><th style='text-align: right;'>仰角模块电量:</th><td>"
								+ boot.elevationElecBlance
								+ "</td></tr><tr><th style='text-align: right;'>设备通讯状态:</th><td>"
								+ (boot.commStatus == '0' ? '正常' : '不正常')
								+ "</td></tr><tr><th style='text-align: right;'>上传时间:</th><td>"
								+ obj.msg + "</td></tr></table>";
					}
					if (popup != null) {
						map.removePopup(popup);
					}
					var xy = map.getPixelFromLonLat(lonLat);
					popup = new OpenLayers.Popup.FramedCloud("chicken", map
							.getLonLatFromPixel(xy), null, html, null, true, function() {
						this.hide();
						dehighLight();
					});
					map.addPopup(popup);
				}
			});
}

/**
 * 设置地图的中心以及缩放级别
 * 
 * @param lon
 *            经度
 * @param lat
 *            纬度
 * @param zoom
 *            缩放级别
 */
function setCenterAndZoom(lon, lat, zoom) {
	// map.zoomTo(5);
	var p = new OpenLayers.LonLat(lon, lat);
	map.setCenter(p, zoom);
}

/**
 * 获取GIS配置信息
 */
function geGisInfo() {
	
	$.ajax({
		url : path + "/gisInfo/getGisInfo.do",
		success : function(data) {
			var obj = eval('(' + data + ')');
			if (obj.success) {
				var gisInfo = obj.obj;
				setCenterAndZoom(gisInfo.lon, gisInfo.lat, gisInfo.zoom);
				var layersArray = gisInfo.layers.split("|");
				for ( var index in layersArray) {
					checkByName(layersArray[index]);
				}
			} else {
				$("input[type='checkbox']").each(function() {
					$(this).attr("checked", true);
				});
				basic_xiang.visibility = true;
				basic_xiang.redraw();
				tielu.visibility = true;
				tielu.redraw();
				guodao.visibility = true;
				guodao.redraw();
				shengdao.visibility = true;
				shengdao.redraw();
				zhugandao.visibility = true;
				zhugandao.redraw();
			}
		}
	});
}

/**
 * 根据名称配置勾选框
 */
function checkByName(layerName) {
	if (layerName == '高炮') {
		$("input[name='高炮']").attr("checked", true);
	} else if (layerName == '火箭车') {
		$("input[name='火箭车']").attr("checked", true);
	} else if (layerName == '烟炉') {
		$("input[name='烟炉']").attr("checked", true);
	} else if (layerName == '混合站点') {
		$("input[name='混合站点']").attr("checked", true);
	} else if (layerName == '乡镇边界') {
		$("input[name='乡镇边界']").attr("checked", true);
		basic_xiang.visibility = true;
		basic_xiang.redraw();
	} else if (layerName == '铁路') {
		$("input[name='铁路']").attr("checked", true);
		tielu.visibility = true;
		tielu.redraw();
	} else if (layerName == '国道') {
		$("input[name='国道']").attr("checked", true);
		guodao.visibility = true;
		guodao.redraw();
	} else if (layerName == '省道') {
		$("input[name='省道']").attr("checked", true);
		shengdao.visibility = true;
		shengdao.redraw();
	} else if (layerName == '主干道') {
		$("input[name='主干道']").attr("checked", true);
		zhugandao.visibility = true;
		zhugandao.redraw();
	}
	getStationMap();
}

/**
 * 保存当前GIS信息
 */
function saveGisInfo() {
	var layers = '';
	$("input[type='checkbox']").each(
			function() {
				if ($(this).attr("checked") == true
						|| $(this).attr("checked") == "checked") {
					layers += $(this).attr("name") + "|";
				}
			});
	$.post(path + "/gisInfo/saveGisInfo.do", {
		layers : layers.substring(0, layers.length - 1),
		zoom : map.getZoom(),
		lon : map.getCenter().lon,
		lat : map.getCenter().lat
	}, function(data) {
		$.messager.alert('提示', '保存成功,下次访问将以该配置显示地图信息!');
	}, "json");
}

/**
 * checkbox执行的方法
 */
function getStationMap() {
	if (popup != null) {
		popup.hide();
	}
	dehighLight();
	var filter = "";
	$("input[class='station']").each(
			function() {
				if ($(this).attr("checked") == true
						|| $(this).attr("checked") == "checked") {
					filter += "device_type = " + $(this).val() + " or ";
				}
			});
	updateStation(filter);
}

/**
 * 过滤站点
 * 
 * @param filter
 */
function updateStation(filter) {
	var filterParams = {
		cql_filter : null,
	};
	if (OpenLayers.String.trim(filter) != "") {
		// 去掉传入参数中末尾的" or "
		filter = filter.substring(0, filter.length - 4);
		filterParams["cql_filter"] = filter;
	} else {
		filterParams["cql_filter"] = "device_type = ':!'";
	}
	point.mergeNewParams(filterParams);
}

/**
 * 自动更新站点是否在线的状态显示
 */
var i = 1;
function updateIsOnline() {
	if (i != 1) {
		point.redraw(true);
	} else {
		i++;
	}
	setTimeout("updateIsOnline()", 10000);
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...