上次简单的接触了一下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>
项目所有源代码和文件已经上传到附件中 了,有需要的可以下载参考!
相关推荐
该脚本能够实现openlayers-Cesium二三维联动效果的功能
在OpenLayers中,你可以创建一个浮动的图层或使用第三方库(如ol-ext)来实现。基本思路是监听地图点击事件,获取点击位置的特征,然后展示相关信息: ```javascript map.on('click', function(event) { const ...
OpenLayers作为业内使用*为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...
OpenLayers作为业内使用最为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...
【二三维离线地图演示系统 V1.0(for OpenLayers3)】 在现代WebGIS应用中,OpenLayers是一个非常流行的开源JavaScript库,用于在网页上显示和操作地图。这个项目,"二三维离线地图演示系统 V1.0(for OpenLayers3...
本教程将详细介绍如何使用OpenLayers加载瓦片地图以及手动在地图上标记坐标点。 一、OpenLayers 瓦片地图 瓦片地图是一种常见的地图展示方式,它将大尺寸的地图分割成多个小块(即“瓦片”),每个瓦片都是一个较...
WebGIS之OpenLayers全面解析第2版(2019年出版)示例代码,比OpenLayers 官方的示例好用多了,基于 OpenLayers 5.x 编写(可用于 6.x),含国内各种地图的配合调用,各类扩展组件的开发示例,有了这个,就不要在在...
4. **例子(Examples)**:压缩包中的"examples"目录包含了各种示例代码,展示如何使用OpenLayers创建不同类型的地图应用。这些实例是学习和理解库功能的好资源,涵盖了从基本的地图加载到复杂交互的各种场景。 5. ...
OpenLayers提供了记录上次操作历史的功能,用户可以使用记录上次操作历史来查看之前的操作记录,例如查看之前的查询记录、编辑记录等。这种功能非常实用,例如在灾害监测、城市规划等领域。 十二、 标签 ...
在本项目中,“vue3版openlayers基础脚手架”是一个使用Vue3框架构建的Web应用程序,它专门用于展示和操作二维地图。OpenLayers是一个强大的开源JavaScript库,它允许开发者在网页上创建交互式地图,支持多种数据源...
通过这个资源包,你将能够掌握OpenLayers的使用技巧,了解WebGIS的基本原理,甚至可以尝试开发自己的地图应用。深入学习OpenLayers,不仅可以提升你的GIS技能,也有助于你理解Web开发中的空间数据处理和交互设计。
OpenLayers 手册 OpenLayers 是一个功能强大的开源 JavaScript 库,用于创建交互式地图应用程序。本手册涵盖了 ...通过本手册,读者可以全面了解 OpenLayers 的所有类和方法,快速掌握 OpenLayers 库的使用。
二、WebGIS与OpenLayers WebGIS是利用Web技术实现地理信息共享和服务的一种方式,OpenLayers作为客户端展示框架,可以将地理数据以地图形式直观呈现,实现地图的浏览、查询、分析等功能。通过OpenLayers,开发者可以...
OpenLayers作为业内使用最为广泛的地图引擎之一,已被各大GIS厂商和广大WebGIS二次开发者采用。借助OpenLayers强大的扩展功能,可以实现与各个不同的WebGIS平台产品相结合,开发出各具特色的WebGIS应用系统。 本书...
闪烁点的实现通常涉及到两部分:一是创建和添加标记,二是使用Canvas进行动画效果的绘制。以下是具体步骤: 1. **创建地图**:首先,我们需要设置一个HTML元素作为地图容器,并初始化一个OpenLayers.Map实例。例如...
这个“openlayers中文文档”提供了对OpenLayers库的中文翻译,帮助中国开发者更好地理解和使用这个强大的工具。 OpenLayers的核心概念主要包括地图(Map)、图层(Layer)、控件(Control)和源(Source)。地图是...