当前位置: 代码迷 >> Web前端 >> OpenLayers运用(二)
  详细解决方案

OpenLayers运用(二)

热度:100   发布时间:2013-08-26 12:17:40.0
OpenLayers使用(二)

上次简单的接触了一下openlayers,这次再来做个小例子测试一下:

我的需求是,在相应的坐标自动生成标注点,(坐标数据可以改成从数据库中读取),当power值为1的时候产生报警,报警的地方的标注点会由静态变成闪烁状态,点击可以获取该点的信息,在弹出的popup上处理报警信息,提交后闪烁状态消失,变回原来的静态标注点!

下面是整个小测试的项目目录:

Eclipse3.9+Mysql5.0+Tomcat6.0,使用ibatis和dwr框架搭配openlayers。

Monitor.java

package project.entity;

public class Monitor {
	private int id;
	private String name;
	private int value;
	
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getValue() {
		return value;
	}
	public void setValue(int value) {
		this.value = value;
	}
}

?
?Monitor.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
	
	<typeAlias alias="Monitor" type="project.entity.Monitor" />

	<select id="selectAllMonitor" resultClass="Monitor">
		select * from monitor
	</select>
	<select id="selectOther" resultClass="Monitor">
		select id,value from monitor
	</select>
	
	<select id="selectById" parameterClass="int" resultClass="Monitor">
		select * from monitor where id=#id#
	</select>
	
	<update id="updateMonitor" parameterClass="Monitor">
		update monitor set name=#name#,value=#value# where id=#id#
	</update>
</sqlMap>

?MonitorDAO.java

package project.dao;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import project.entity.Monitor;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class MonitorDAO {
	private static SqlMapClient sqlMapClient = null;
	
	static{
		Reader reader;
		try {
			reader = Resources.getResourceAsReader("SqlMapConfig.xml");
			sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	public List<Monitor> queryAllMonitor() throws SQLException{
		List<Monitor> monitorList = null;
		monitorList = sqlMapClient.queryForList("selectAllMonitor");
		return monitorList;
	}
	
	
	public List<Monitor> queryOther() throws SQLException{
		List<Monitor> moList = null;
		moList = sqlMapClient.queryForList("selectOther");
		return moList;
	}
	
	
	public boolean updateMonitorMsg(Monitor mo) throws SQLException{
		boolean flag = false;
		int i = sqlMapClient.update("updateMonitor", mo);
		if(i > 0){
			flag = true;
		}
		return flag;
	}
	
	
	public Monitor queryById(int id) throws SQLException{
		Monitor mo = (Monitor) sqlMapClient.queryForObject("selectById", id);
		return mo;
	}
	
	
	public static void main(String[] args) throws SQLException{
		MonitorDAO d = new MonitorDAO();
		List<Monitor> arr = d.queryOther();
		Iterator<Monitor> it = arr.iterator();
		while(it.hasNext()){
			Monitor m = it.next();
			System.out.println(m.getId()+":"+m.getValue());
		}
	}
}

?下面是综合测试的小例子:test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test4</title>
<style type="text/css">
	
</style>
<script type="text/javascript" src="OpenLayers/OpenLayers.js"></script>
<script type="text/javascript" src="dwr/interface/dao.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript">
	var map = null;
	var markers = null;
	var flag = 0;
	var arrmarkers = new Array();
	var arrlistbak = new Array();
	var lls = new Array();
	function init(arrlist){
		
		if(flag == 0){
			var options={
				controls:[new OpenLayers.Control.KeyboardDefaults()]
			};
			map = new OpenLayers.Map('map',options);
			var bounds = new OpenLayers.Bounds();
			bounds.extend(new OpenLayers.LonLat(0,0));
			bounds.extend(new OpenLayers.LonLat(500,500));
			bounds.toBBOX();
			var size = new OpenLayers.Size(400,400);
			var wms = new OpenLayers.Layer.Image('b','OpenLayers/img/maptest.jpg',bounds,size);
				
			map.addLayer(wms);
			map.setBaseLayer(wms);
			map.zoomToMaxExtent();
			flag = 1;
			
			markers = new OpenLayers.Layer.Markers("Hello");
			map.addLayer(markers);
			lls = [[112,252],[86,34],[150,350]];
		}
		
		
		for(var i=0;i<lls.length;i++){
			var arr = lls[i];
			var lonlat = new OpenLayers.LonLat(arr[0],arr[1]);
			markers = autoAddMarker(lonlat,arrlist[i]);
		}
		
		
    }
	
	function getIcon(n){
		var size = new OpenLayers.Size(21,25);
		var offset = new OpenLayers.Pixel(-(size.w/2),-size.h);
		var icon=null;
		if(n == 0){
			icon = new OpenLayers.Icon('OpenLayers/img/011k.gif',size,offset);
		}else if(n == 1){
			icon = new OpenLayers.Icon('OpenLayers/img/marker.png',size,offset);
		}
		return icon;
	}
	
	function autoAddMarker(lonlat,arrlist){
			var marker=null;
			if(arrmarkers.length > 0){
				for(var i=0;i<arrmarkers.length;i++){
					if(arrmarkers[i].lonlat.lat == lonlat.lat && arrmarkers[i].lonlat.lon == lonlat.lon){
						markers.removeMarker(arrmarkers[i]);
					}
				}
			}
			
			arr = arrlist;
			if(arr[1] == 0){
				marker = new OpenLayers.Marker(lonlat,getIcon(0));
			}else if(arr[1] == 1){
				marker = new OpenLayers.Marker(lonlat,getIcon(1));
			}
			
			marker.events.register('click',this,function(evt){
				var id=0;
				if(lonlat.lon == 112 && lonlat.lat == 252){
					id=1;
				}else if(lonlat.lon == 86 && lonlat.lat == 34 ){
					id=2;
				}else if(lonlat.lon == 150 && lonlat.lat == 350){
					id=3;
				}
				dao.queryById(id,function(bb){
					
					var mo = new Array();
					mo[0] = bb.id;
					mo[1] = bb.name;
					mo[2] = bb.value;
					removeAllPopup();
					
					
					var popup = createPopup(lonlat,mo);
					map.addPopup(popup);
					
				});
				OpenLayers.Event.stop(evt);
			});
			markers.addMarker(marker);
			arrmarkers = markers.markers;
			return markers;
		
	}
	
	function removeAllPopup(){
		var len = map.popups.length;
		for(var i=len-1;i>=0;i--){
			map.removePopup(map.popups[i]);
		}
	}
	
	function createPopup(lonlat,arr){
		var size = new OpenLayers.Size(210,180);
		var html = '<form style="width:200px;height:150px;padding:0px;margin:0px;" id="marker_form" action="">';
		html += '<div>id:</div>';
		html += '<input type="text" id="id" value="'+arr[0]+'" style="width:100%;" readonly="readonly"/>';
		html += '<div>MonitorMsg:</div>';
		html += '<input type="text" id="name" value="'+arr[1]+'" style="width:100%;" />';
		html += '<div>Monitor Value:</div>';
		html += '<input type="text" id="value" value="'+arr[2]+'" style="width:100%;" />';
		html += '<div align="center" style="padding:10px;">';
		html += '<input type="button" value="提交" onclick="toSubmit()"/>';
		html += '<input type="reset" value="取消"/>';
		html += '</div>';
		html += '</form>';
		
		var popup = new OpenLayers.Popup("mar",new OpenLayers.LonLat(200,350),size,html,true);
		return popup;
	}
	
	function getRecord(){
		dao.queryAllMonitor(createList);
	}
	
	function createList(data){
		var arrlist = new Array();
		for(var i=0;i<data.length;i++){
			arrlist[i] = [data[i].id,data[i].value,data[i].name];
		}
		
		if(arrlistbak.sort().toString() != arrlist.sort().toString()){
			arrlistbak = arrlist;
			init(arrlist);
		}
	}
	
	function MyShow(){
		timer = window.setInterval("getRecord()",2000);
	}
	
	function toSubmit(){
		var data = {'id':dwr.util.getValue('id'),'name':dwr.util.getValue('name'),'value':dwr.util.getValue('value')};
		dao.updateMonitorMsg(data,function(result){
			if(result == true){
				alert("处理成功!");
				removeAllPopup();
			}
		});
	}
</script>
</head>
<body onload="MyShow()">
	<div id="map" style="width:500px;height: 500px;"></div>
</body>
</html>

?


?

项目所有源代码和文件已经上传到附件中 了,有需要的可以下载参考!

  相关解决方案