转自:http://starting.iteye.com/blog/1039809

主要实现的功能有放大,缩小,获取地图大小,平移,线路测量,面积测量,拉宽功能,显示标注,移除标注,画多边形获取经纬度坐标。根据经纬度坐标显示多边形。地图切换,图层控制等功能。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpenLayers map preview</title>
<!-- Import OL CSS, auto import does not work with our minified OL.js build -->
<link rel="stylesheet" type="text/css" href="../theme/default/style.css"/>
<link rel="stylesheet" href="../theme/default/google.css" type="text/css">
<!-- Basic CSS definitions -->
<style type="text/css">
/* General settings */
body {
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: small;
}
/* Toolbar styles */
#toolbar {
position: relative;
padding-bottom: 0.5em;

}

/* The map and the location bar */
#map {
clear: both;
position: relative;
width: 698px;
height: 330px;
border: 1px solid black;
}

#wrapper {
width: 698px;
}

#location {
float: right;
}

/* Styles used by the default GetFeatureInfo output, added to make IE happy */
table.featureInfo, table.featureInfo td, table.featureInfo th {
border: 1px solid #ddd;
border-collapse: collapse;
margin: 0;
padding: 0;
font-size: 90%;
padding: .2em .1em;
}

table.featureInfo th {
padding: .2em .2em;
text-transform: uppercase;
font-weight: bold;
background: #eee;
}

table.featureInfo td {
background: #fff;
}

table.featureInfo tr.odd td {
background: #eee;
}

table.featureInfo caption {
text-align: left;
font-size: 100%;
font-weight: bold;
text-transform: uppercase;
padding: .2em .2em;
}
</style>
<!-- Import OpenLayers, reduced, wms read only version -->
<script src="../lib/OpenLayers.js" ></script>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script defer="defer" type="text/javascript">
var map, measureControls;
var untiled;
var tiled;

function init(){
format = 'image/png';
var bounds = new OpenLayers.Bounds( //地图区域范围
74.137, 6.319,
135.086, 53.558
);
var options = {
controls: [],
maxExtent: bounds,
maxResolution: 0.23808203125,
projection: "EPSG:4610",
numZoomLevels: 7,
units: 'degrees'
};
map = new OpenLayers.Map('map', options);

/**********************加载图层 开始*******************************/
/* tiled = new OpenLayers.Layer.WMS( //图层组
"基础图层", "http://localhost:8080/geoserver/wms",
{
height: '330',
width: '698',
layers: 'sf',
styles: '',
srs: 'EPSG:4326',
format: format,
tiled: 'true',
tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom
},
{
buffer: 0,
displayOutsideMaxExtent: true
}
);*/

var streams = new OpenLayers.Layer.WMS( //图层组
"中国", "http://localhost:8080/geoserver/wms",
{
height: '330',
width: '698',
layers: 'china',
styles: '',
srs: 'EPSG:4610',
format: format,
tiled: 'true',
tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom
},
{
buffer: 0,
displayOutsideMaxExtent: true

}
);

untiled = new OpenLayers.Layer.WMS( //单独图层
"省会", "http://127.0.0.1:8080/geoserver/wms",
{
height: '330',
width: '698',
layers: 'china:provice',
styles: '',
srs: 'EPSG:4610',
transparent: "true",
format: format
},
{singleTile: true, ratio: 1}
);
untiled.setVisibility(false); //设置为不显示
//var gmap = new OpenLayers.Layer.Google("Google Streets", {visibility: false});
/* var dm_wms = new OpenLayers.Layer.WMS( "点图层",
"http://127.0.0.1:8080/geoserver/wms",
{layers: "sf:bugsites,sf:archsites",
transparent: "true", format: "image/png"});*/

map.addLayers([streams,untiled]);
/********************END 加载图层*********************************/

/************************加载一般的基础控件********************************/
map.addControl(new OpenLayers.Control.PanZoomBar({ //添加平移缩放工具条
position: new OpenLayers.Pixel(2, 15)
}));
map.addControl(new OpenLayers.Control.Navigation()); //双击放大,平移
map.addControl(new OpenLayers.Control.Scale($('scale'))); //获取地图比例尺
map.addControl(new OpenLayers.Control.MousePosition({element: $('location')})); //获取鼠标的经纬度
map.setCenter(new OpenLayers.LonLat(100.254, 35.25), 1); //添加平移缩放工具条
map.addControl(new OpenLayers.Control.OverviewMap()); //添加鹰眼图
map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false})); //图层切换工具
map.addControl(new OpenLayers.Control.Permalink('xxxx')); //添加永久链接
//map.addControl(new OpenLayers.Control.MouseToolbar());

//map.zoomToMaxExtent();
var zb=new OpenLayers.Control.ZoomBox({out:true});
var panel = new OpenLayers.Control.Panel({defaultControl: zb});
map.addControl(panel);
/************END************加载一般的基础控件********************************/

/***********************鼠标点击,获取图层数据*******************************/
map.events.register('click', map, function (e) {
document.getElementById('nodelist').innerHTML = "Loading... please wait...";
var params = {
REQUEST: "GetFeatureInfo",
EXCEPTIONS: "application/vnd.ogc.se_xml",
BBOX: map.getExtent().toBBOX(),
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: 'text/html',
QUERY_LAYERS: map.layers[0].params.LAYERS,
FEATURE_COUNT: 50,
Layers: 'ok',
Styles: '',
Srs: 'EPSG:4610',
WIDTH: map.size.w,
HEIGHT: map.size.h,
format: format};
OpenLayers.loadURL("http://localhost:8080/geoserver/wms", params, this, setHTML, setHTML);
OpenLayers.Event.stop(e);
});
/**************END*********鼠标点击,获取图层数据*******************************/

/**********************************点、线、面测量开始**********************************************/
var sketchSymbolizers = {
"Point": {
pointRadius: 4,
graphicName: "square",
fillColor: "white",
fillOpacity: 1,
strokeWidth: 1,
strokeOpacity: 1,
strokeColor: "#333333"
},
"Line": {
strokeWidth: 3,
strokeOpacity: 1,
strokeColor: "#666666",
strokeDashstyle: "dash"
},
"Polygon": {
strokeWidth: 2,
strokeOpacity: 1,
strokeColor: "#666666",
fillColor: "white",
fillOpacity: 0.3
}
};
var style = new OpenLayers.Style();
style.addRules([
new OpenLayers.Rule({symbolizer: sketchSymbolizers})
]);
var styleMap = new OpenLayers.StyleMap({"default": style});
measureControls = {
line: new OpenLayers.Control.Measure(
OpenLayers.Handler.Path, {
persist: true,
handlerOptions: {
layerOptions: {styleMap: styleMap}
}
}
),
polygon: new OpenLayers.Control.Measure(
OpenLayers.Handler.Polygon, {
persist: true,
handlerOptions: {
layerOptions: {styleMap: styleMap}
}
}
)
};
var control;
for(var key in measureControls) {
control = measureControls[key];
control.events.on({
"measure": handleMeasurements,
"measurepartial": handleMeasurements
});
map.addControl(control);
}
/***************************END************点,线、面积测量*****************************************/

//添加点标注的图层
markers = new OpenLayers.Layer.Markers("markers");
map.addLayer(markers);
markers.setZIndex(200);

}

//获取面积的结果赋值
function handleMeasurements(event) {
var geometry = event.geometry;
var units = event.units;
var order = event.order;
var measure = event.measure;
var element = document.getElementById('output');
var out = "";
if(order == 1) {
out += "面积为: " + measure.toFixed(3) + " " + units;
} else {
out += "面积为: " + measure.toFixed(3) + " " + units + "<sup>2</" + "sup>";
}
element.innerHTML = out;
}
function setHTML(response){
document.getElementById('nodelist').innerHTML = response.responseText;
};
//缩小
function zoomOut(){
map.zoomOut();
}
//放大
function zoomIn(){
map.zoomIn();
}
//获取地图数据
function getSize(){
alert(map.getSize()+",高度为="+map.getSize().h);
}
//切换鼠标事件功能
function toggleControl(_value) {

for(key in measureControls) {
var control = measureControls[key];
if(_value == key ) {
control.activate();
} else {
control.deactivate();
}
}
}

/*********************拉宽并获取经纬度坐标系*********************************/
function boxExtend(){
var controlBox = new OpenLayers.Control();
OpenLayers.Util.extend(controlBox, {
draw: function () {
this.box = new OpenLayers.Handler.Box( controlBox,
{"done": this.notice},{ "persist": true},
{keyMask:OpenLayers.Handler.MOD_SHIFT });
this.box.activate();
},

notice: function (bounds) {
var ll = map.getLonLatFromPixel(new OpenLayers.Pixel(bounds.left, bounds.bottom));
var ur = map.getLonLatFromPixel(new OpenLayers.Pixel(bounds.right, bounds.top));
alert(ll.lon.toFixed(4) + ", " +
ll.lat.toFixed(4) + ", " +
ur.lon.toFixed(4) + ", " +
ur.lat.toFixed(4));
}
});
map.addControl(controlBox);
}
var markers,marker;
var markArr=new Array();
function addMarker(){
var url = 'http://www.openlayers.org/dev/img/marker.png';
var sz = new OpenLayers.Size(20, 20); //尺寸大小
var calculateOffset = function(size) {
return new OpenLayers.Pixel(-(size.w/2), -size.h);
};
var icon = new OpenLayers.Icon(url, sz, null, calculateOffset);

marker = new OpenLayers.Marker(new OpenLayers.LonLat(113.34851,33.22630), icon);
markers.addMarker(marker);

// marker = new OpenLayers.Marker(madrid, icon.clone());
// markers.addMarker(marker);
}
function removeMarker() {
markers.removeMarker(marker);
}
/*******************多边形获取经纬度坐标系*************************/
function test(){
var getpolygonxy = new OpenLayers.Control();
OpenLayers.Util.extend(getpolygonxy, {
draw: function() {
this.polygon= new OpenLayers.Handler.Polygon(getpolygonxy ,
{ "done": this.notice },{ "persist": true},
{ keyMask: OpenLayers.Handler.MOD_SHIFT });
this.polygon.activate();
},
notice: function(bounds) {
alert(bounds);//坐标信息
}
});
map.addControl(getpolygonxy);
}

</script>
</head>
<body οnlοad="init()">
<div id="toolbar" style="display:">
<input type="button" value="放大" οnclick="zoomIn()"/>
<input type="button" value="缩小" οnclick="zoomOut()"/>
<input type="button" value="获取地图大小" οnclick="getSize()"/>
<input type="button" value="平移" οnclick="toggleControl('none')"/>
<input type="button" value="线路测量" οnclick="toggleControl('line')"/>
<input type="button" value="测量面积" οnclick="toggleControl('polygon')"/>
<input type="button" value="shift拉框" οnclick="boxExtend()"/>
<input type="button" value="显示标注" οnclick="addMarker()"/>
<input type="button" value="移除标注" οnclick="removeMarker()"/>
<input type="button" value="画多边形获取经纬度坐标" οnclick="test()"/>
</div>
<div id="map">

</div>
<div id="wrapper">
<div id="location">经纬度坐标</div>
<div id="scale">
</div>
<div id="output">
</div>
</div>
<div id="xystr"></div>
<div id="nodelist">
<em>Click on the map to get feature info</em>
</div>
</body>
</html>

转载于:https://www.cnblogs.com/cugwx/p/3725304.html

openlayer调用geoserver发布的地图实现地图的基本功能相关推荐

  1. geoserver发布TIF格式瓦片地图

    一,准备tif地图 可以通过全能电子地图下载器获取地图(软件可以去淘宝下载) 二,geoserver发布tif 在geoserver安装文件夹中双击"startup.bat"打开服 ...

  2. Cesium调用Geoserver发布的 WMS、WFS服务

    1 GeoServer服务发布 1.1 WMS服务 下载GeoServer安装版安装,同时安装geopackage扩展,以备使用.使用XX地图下载器下载地图,导出成GeoPackage地图文件. (1 ...

  3. geoserver发布瓦片数据_geoserver地图发布服务教程(3)——快速配置矢量样式

    又是忙碌的一个星期,总算有时间来继续填这个坑了.今天就把样式发布搞定了! 通常地图发布之后,要配置样式,来让矢量更好更美的展现出来.geoserver就是通过过style样式的来控制地理空间数据的外观 ...

  4. linux安装geoserver、postgis,发布wms、wmts地图服务

    1.Linux服务器安装Geoserver 注:确保系统已经有Java环境,GeoServer要求具备Java8或Java11环境 进入下载界面 https://geoserver.org/relea ...

  5. JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图

    JavaWeb和WebGIS学习笔记(三)--GeoServer 发布shp数据地图 系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gi ...

  6. geoserver 发布地图案例

    1下载安装 1.1 下载地址 http://geoserver.org/release/2.19.3/ 1.2 下载:绿色版安装 1.3使用/bin/start.bat 启动 1.4 访问地址 htt ...

  7. Cesium加载geoserver发布的wms地图服务-设置BBOX参数无效

    一.问题描述: 地图服务是geoserver发布的wms地图服务,使用cesium加载渲染,加载代码如下. // Cesium加载wms var wms = new Cesium.WebMapServ ...

  8. geoserver发布地图服务后不能预览,竟然变成下载WMS文件

    geoserver发布地图服务后不能预览,竟然变成下载WMS文件 问题描述:geoserver发布地图服务后不能预览,竟然变成下载WMS文件,用记事本打开下载文件显示错误信息:java.lang.Nu ...

  9. Geoserver发布切片地图组完整教程

    Geoserver发布切片地图组完整教程 特别注意:geoserver中所有使用的名称都不用使用中文!!!!,以免出现未知错误. - 下载安装Geoserver 1.下载地址http://geoser ...

最新文章

  1. linux基础-延时命令:sleep
  2. 听说,京沪津的人都爱直接“看牌”买买买
  3. Dell服务器常用管理命令总结
  4. 【网络安全】JAVA代码审计—— XXE外部实体注入
  5. 《大型网站技术架构》读书笔记三:大型网站核心架构要素
  6. vue3的传送门teleport究竟有多神奇?suspense发起异步请求有多简约?
  7. 诺基亚计划推出高档触摸屏手机以对抗iPhone
  8. 如何理解lvs中DR模型的arp请求-arp_announce和arp_ignore
  9. gets函数用不了_函数篇:指数函数
  10. RHEL7安装ZABBIX 3.2
  11. GSM:联通项目中的常见术语(BTS、BSC、MSC、VLR、HLR)
  12. 11个值得掌握的Java代码性能优化技巧
  13. JS实现复制到剪贴板功能
  14. 安装了多个java 如何切换java版本
  15. 【AAAI 2021】多出口架构的知识蒸馏:Harmonized Dense Knowledge Distillation Training for Multi-Exit Architectures
  16. 广州蓝景分享—程序员必备的3个JavaScript插件,让你的视频更实用
  17. 测试用例和bug描述规范参考
  18. 输入两个自然数min,max,计算、输出[min,max]中的超级素数的个数#C语言
  19. robocode 相关的总结
  20. css文本与字体样式(基础知识整理)

热门文章

  1. Win32 Application和Win32 Console Application的区别
  2. c语言静态成员变量重名会怎么样,C++中静态成员函数与静态成员变量(static )...
  3. Matlab求矩阵大小
  4. mysql 实体类_Mysql生成实体类
  5. datagrid 什么时候结束编辑_孕吐到底什么时候结束
  6. 计算机c盘能分区吗,电脑C盘怎么分区
  7. android+完美的列表,android完美讲义.pdf
  8. java服务器崩溃的原因_请求大神帮忙分析一下服务器崩溃原因
  9. java中解密技术是什么_详解Java 加密解密技术的分类和归纳
  10. 科学计算机看电量,解密:关于手机电量为1%是如何科学的算出来的?