`

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>

 


 

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

  • 大小: 45.8 KB
  • 大小: 61.8 KB
分享到:
评论
5 楼 zeng8960 2014-07-11  
楼主,求数据库
4 楼 影非弦 2014-07-08  
luyangchild 写道
数据库没有上传么。楼主

木有啊,忘记了
3 楼 luyangchild 2014-07-07  
数据库没有上传么。楼主
2 楼 影非弦 2013-10-11  
angangle 写道
空白的

什么空白的?需要数据库
1 楼 angangle 2013-10-10  
空白的

相关推荐

    实现openlayers-Cesium二三维联动效果的功能脚本1

    该脚本能够实现openlayers-Cesium二三维联动效果的功能

    openlayers常用功能简单封装

    在OpenLayers中,你可以创建一个浮动的图层或使用第三方库(如ol-ext)来实现。基本思路是监听地图点击事件,获取点击位置的特征,然后展示相关信息: ```javascript map.on('click', function(event) { const ...

    webgis之openlayers全面解析pdf

    OpenLayers作为业内使用*为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...

    WebGIS之OpenLayers全面解析

    OpenLayers作为业内使用最为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...

    二三维离线地图演示系统 V1.0(for OpenLayers3)

    【二三维离线地图演示系统 V1.0(for OpenLayers3)】 在现代WebGIS应用中,OpenLayers是一个非常流行的开源JavaScript库,用于在网页上显示和操作地图。这个项目,"二三维离线地图演示系统 V1.0(for OpenLayers3...

    openlayers加载瓦片地图并手动标记坐标点

    本教程将详细介绍如何使用OpenLayers加载瓦片地图以及手动在地图上标记坐标点。 一、OpenLayers 瓦片地图 瓦片地图是一种常见的地图展示方式,它将大尺寸的地图分割成多个小块(即“瓦片”),每个瓦片都是一个较...

    WebGIS之OpenLayers 全面解析第2版示例代码

    WebGIS之OpenLayers全面解析第2版(2019年出版)示例代码,比OpenLayers 官方的示例好用多了,基于 OpenLayers 5.x 编写(可用于 6.x),含国内各种地图的配合调用,各类扩展组件的开发示例,有了这个,就不要在在...

    OpenLayers v5.3.0 release

    4. **例子(Examples)**:压缩包中的"examples"目录包含了各种示例代码,展示如何使用OpenLayers创建不同类型的地图应用。这些实例是学习和理解库功能的好资源,涵盖了从基本的地图加载到复杂交互的各种场景。 5. ...

    openlayers典型例子展示

    OpenLayers提供了记录上次操作历史的功能,用户可以使用记录上次操作历史来查看之前的操作记录,例如查看之前的查询记录、编辑记录等。这种功能非常实用,例如在灾害监测、城市规划等领域。 十二、 标签 ...

    vue3版openlayers基础脚手架

    在本项目中,“vue3版openlayers基础脚手架”是一个使用Vue3框架构建的Web应用程序,它专门用于展示和操作二维地图。OpenLayers是一个强大的开源JavaScript库,它允许开发者在网页上创建交互式地图,支持多种数据源...

    WebGIS之OpenLayers全面解析 源码+数据库

    通过这个资源包,你将能够掌握OpenLayers的使用技巧,了解WebGIS的基本原理,甚至可以尝试开发自己的地图应用。深入学习OpenLayers,不仅可以提升你的GIS技能,也有助于你理解Web开发中的空间数据处理和交互设计。

    openlayers 手册

    OpenLayers 手册 OpenLayers 是一个功能强大的开源 JavaScript 库,用于创建交互式地图应用程序。本手册涵盖了 ...通过本手册,读者可以全面了解 OpenLayers 的所有类和方法,快速掌握 OpenLayers 库的使用。

    WebGIS之OpenLayers全面解析源码.rar

    二、WebGIS与OpenLayers WebGIS是利用Web技术实现地理信息共享和服务的一种方式,OpenLayers作为客户端展示框架,可以将地理数据以地图形式直观呈现,实现地图的浏览、查询、分析等功能。通过OpenLayers,开发者可以...

    《WebGIS之OpenLayers全面解析》一书源码

    OpenLayers作为业内使用最为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...

    openlayers3添加闪烁点

    闪烁点的实现通常涉及到两部分:一是创建和添加标记,二是使用Canvas进行动画效果的绘制。以下是具体步骤: 1. **创建地图**:首先,我们需要设置一个HTML元素作为地图容器,并初始化一个OpenLayers.Map实例。例如...

    openlayers中文文档

    这个“openlayers中文文档”提供了对OpenLayers库的中文翻译,帮助中国开发者更好地理解和使用这个强大的工具。 OpenLayers的核心概念主要包括地图(Map)、图层(Layer)、控件(Control)和源(Source)。地图是...

Global site tag (gtag.js) - Google Analytics