PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示

摘要:
标题比较长,主要是为了达到以下几点:1。将shp数据导入PostGIS;2.Geoserver发布WMS服务;3.Openlayers调用Wms服务。首先,下载并安装软件。有两种方法可以将shp数据导入PostGIS:1。通过QGIS的辅助工具;2.从cmd命令行。接下来,在Geoserver中发布。

标题比较长,主要呢是实现以下几点:

1、将shp数据导入到PostGIS中;

2、Geoserver发布WMS服务;

3、Openlayers调用Wms服务


首先,下载安装软件。

为方便大家下载,我将所有软件上传的百度网盘里了,有需要的可以上网盘直接下载,地址为:http://pan.baidu.com/s/1ntJrf8P,此外,openlayers的下载地址为:http://pan.baidu.com/s/1kTBTCX5。

软件下载完成以后安装,如何安装在此就不做详述了,不过注意:postgresql-8.4.14-1-windows安装完成之后,Stack Builder直接取消,下载太慢,安装postgis-pg84-setup-2.0.3-1即可。


接着,将shp数据导入到PostGIS中。

将shp数据导入到PostGIS有两种方式:1、通过QGIS的辅助工具;2、通过cmd命令行。

1、通过Qgis辅助工具

打开QGIS——》打开辅助工具Import ShapeFiles to PostgreSQL

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第1张

——》新建PostGIS连接

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第2张

——》添加shp数据

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第3张

注意:Schema类型选择public。

2、通过cmd命令行

通过cmd的方式比较简单,首先,进入命令窗口,切换到PostgreSql的bin路径:

</pre><pre name="code" class="plain">cd C:Program Files (x86)PostgreSQL8.4in>
将shp数据转换为SQL语句:

shp2pgsql D:datawgs84mcounty.shp mcounty > D:datawgs84mcounty.sql
新建table并将数据导入:

psql -d opengis -f D:datawgs84mcounty.sql postgres
比较:
第一种操作比较简单,但是,操作步骤比较多,但是第一种操作在导入POLYGON的时候会存在MULTIPOLYGON或者POLYGON的转化的不一致的问题,导致数据导入的不成功。


接着,在Geoserver中发布。

1、新建数据存储

在Geoserver中新建POSTGIS的数据存储

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第4张

然后发布图层:

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第5张
图层发布完成之后转到图层预览,以openlayers的方式打开:

PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示第6张

当你看到这个图的时候,就说明你的服务已经发布成功了!

接下来就是用Openlayers调用显示,

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>china EPSG:4326 image/png</title>
<link rel="stylesheet" type="text/css" href="http://200.200.200.223/OpenLayers-2.12/theme/default/style.css"/>
<style type="text/css">
	body { font-family: sans-serif; font-weight: bold; font-size: .8em; }
	body { border: 0px; margin: 0px; padding: 0px; }
	#map {  100%; height: 100%; border: 0px; padding: 0px; }
	#nodelist{
		position:absolute;
		right:10px;
		top:10px;
		background:#FFF;
		border:#06F solid 2px;	
		padding:5px;
	}
</style>
<script type="text/javascript" src="http://200.200.200.223/OpenLayers-2.12/OpenLayers.js"></script>
<script type="text/javascript" src="http://200.200.200.223/OpenLayers-2.12/lib/OpenLayers/Lang/zh-CN.js"></script>
<script type="text/javascript">               
	var map, demolayer;                                                                        
	OpenLayers.DOTS_PER_INCH = 90.71428571428572;
	OpenLayers.Util.onImageLoadErrorColor = 'transparent';
	function init(){
		var mapOptions = { 
			resolutions: [0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 
				0.010986328125, 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, 5.364418029785156E-6, 2.682209014892578E-6, 
				1.341104507446289E-6, 6.705522537231445E-7, 3.3527612686157227E-7
			],
			projection: new OpenLayers.Projection('EPSG:4326'),
			maxExtent: new OpenLayers.Bounds(-180.0,-90.0,180.0,90.0),
			units: "degrees",
			controls: []
		};
		map = new OpenLayers.Map('map', mapOptions );
		
		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')}));
		
		var wms = new OpenLayers.Layer.WMS(
			"lake", 
			"http://200.200.200.223:8888/geoserver/wms",
			{
				LAYERS: "mpro",
				transparent:true
			},
			{
				singleTile: false, 
				ratio: 1, 
				isBaseLayer: false,
				visibility:true,
				yx : {'EPSG:4326' : true}
			} 
		);
		map.addLayer(wms);
		
		map.zoomToExtent(new OpenLayers.Bounds(73.45100463600005, 18.16324718800007, 
			134.976797647, 53.53194315200005)
		);
		
		map.events.register('click', map, function (e) {
        	console.log(e);            
        });		
	}
</script>
</head>
<body onLoad="init()">
	<div id="map"></div>
</body>
</html>

如有疑问,请联系:

QQ:1004740957

Email:niujp08@qq.com


免责声明:文章转载自《PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇值对象使用Mathjax网页插入公式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

pl/sql中的取模运算

pl/sql语言的取模(即求余)运算不使用大部分语言所支持的a%b而是使用函数mod(a,b)例子如下:写一个匿名块判断某年是否是闰年,能被4但是不能被100整除,或者能被400整除1declare2judgevarchar2(200);3year_inputnumber;4begin5year_input:='&输入年份';6if(mod(year...

移动通信网络中的 GTP 协议

在EPSUP中使用GTP的优点之一是GTP具有固有的可识别隧道机制和GTP可以为UE提供的移动性。注意:GTPv2-U协议不存在。GTP-C协议GTP-C是GTP的控制平面,使用UDP端口2123。在EPS中,GTPv2-C协议负责创建、维护和删除S1、S5/S8和其他接口上的GTP-U隧道。它是一种基于IP的隧道协议,允许在GTP UProtocolEnt...

IOS崩溃日志解析(crash log)

IOS的应用程序少不了crash,互联网统计分析工具友盟有一项目错误分析的功能,专门用于应用程序崩溃日志统计,最近研究友盟上统计到的崩溃日志,在此对崩溃日志做一个简单的总结。否则,应用将被iOS终止,并产生低内存崩溃报告。这样,我们去我们的dSYM文件看看我们的UUID是否和崩溃日志上的UUID一致,只有dSYM文件的UUID和崩溃日志上的UUID一致,我们...

C#控件重绘学习(一)

由于需要制作工业控制软件,传统的控制已不能满足实际要求,因此控制的重新绘制迫在眉睫。因为考研花费了很多时间,而C#的学习已经搁浅了很长时间,所以我打算借此机会仔细彻底地研究控件的重新绘制。首先,查看Button的旧背景:namespace:SystemWindows.Forms程序集:System.Windows.FormsButton具有太多属性:例如Ba...

Java 读取ANSI文件中文乱码问题解决方式[转]

Filefile=newFile(路径);InputStreamin=newjava.io.FileInputStream(文件);BufferedReader读取器=新的BufferedReader(读取);FileInputStreamin=newFileInputStream(文件);byte[]b=新字节[3];内容如下(b);...

Uni-app v-on监听事件

使用标记上的v-on监视事件。缩写为@click common click events方法:方法:{Focus(){console.log;},blur(){console.log;},confirm(){console.log;},click(){console.log;},tap(){console.log;},longpress(){console....