geoserver openlayers geotools. geoserver...

23
GIS 介介 Geoserver Openlayers Geotools

Upload: berniece-primrose-manning

Post on 12-Jan-2016

278 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍

• Geoserver

• Openlayers

• Geotools

Page 2: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• Geoserver

地图服务器,方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。

1. 地图发布

2. 数据库连接

3. 缓存设置

Page 3: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• Openlayers

用于 WebGIS 客户端的 JavaScript 包,解析地图操作数据,进行地图渲染等 能够利用的地图数据资源:WMS , WFS , GoogleMap 等

Page 4: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍WMS:

Web 地图服务( Web map service), 利用具有地理空间位置信息的 数据制作地图。其中将地图定义为地理数据可视的表现。三个规范定义操作:GetCapabitities 返回服务级元数据,它是对服务信息内容和要 求参数的一种描述; GetMap 返回一个地图影像,其地理空间参考和大小参数是明确定义了的;GetFeatureInfo (可选)返回显示在地图上的某些特殊要素的信息。

WFS支持对地理要素的插入,更新,删除,检索和发现服务。该服务根据 HTTP 客

户请求返回 GML 数据。 WFS 对应于常见桌面程序中的条件查询功能基础接口是:

GetCapabilities 返回服务级元数据。 DescribeFeatureType 返回要素结构,以便客户端进行查询和其他操作。

GetFeature 可根据查询要求返回一个符合 GML 规范的数据文档。WFS 的请求是通过 Filter XML 来实现, WFS 所返回的是查询的结果集

GML 即地理标识语言, GML 能够表示地理空间对象的空间数据和非空间属性数据。

Page 5: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• Openlayers API

• Openlayers 地图渲染1 、实例化 map 对象2 、图层添加3 、控件使用

• Openlayers 事件机制

Page 6: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍实例化 map 对象var options = {

maxExtent : new OpenLayers.Bounds(11569508.601, 3576641.428, 11600618.472, 3604999.565),

maxResolution : "auto",projection : "EPSG:3785",scales : [108000,54000,27000,14000,6771],units : 'm',//maxScale: 500, minScale: 500000,//numZoomLevels: 5,tileSize : new OpenLayers.Size(256, 256)

};map = new OpenLayers.Map('map', options);

Page 7: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 基础图层 layer = new OpenLayers.Layer.WMS( 'hctelecom:sichuan16', "http://localhost:8089/geoserver/hctelecom/wms",

{ alwaysInRange:true,LAYERS: 'hctelecom:sichuan16',STYLES: '',format: 'image/jpeg', tiled: !true

}, { isBaseLayer : false,opacity : "0.6",

'buffer':0, singleTile: true, alwaysInRange:true ,

eventListeners:{// 'loadstart':baseLayersStart//'loadend': layerAction.baseLayerLoadEnd

} }) map.addLayer(layer);

Page 8: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• WFS 矢量数据

layer = new OpenLayers.Layer.WFS( "Unit", "http://192.98.151.17:8081/geoserver/wfs", {typename: 'cq:GPOI_GOV'}, { typename: 'unit', featureNS: 'http://www.openplans.org/cq', extractAttributes: true, maxfeatures: 10, textAttrToDisplay: 'lname' } ); map.addLayer(layer);WFS 矢量数据,由 openlayers 在客户端绘制,数量太多会导致速度缓慢

Page 9: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 添加 feature

1 、 var vector=new OpenLayers.Layer.Vector("feature",{eventListeners:{'featureselected':onFeatureSelectedAction, "beforefeatureadded":onBeforefeatureaddedAction,

"featuresadded"onFeaturesaddedAction},styleMap:new OpenLayers.StyleMap({

fillColor:deftColor,strokeColor:deftColor,strokeWidth:featureLineWidth,pointRadius:10,label:"Drag me ...",fontColor: deftColor,fontSize:"10px",

})});map.addLayer(vector);

Page 10: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 添加 feature

2 、 var point = new OpenLayers.Geometry.Point(104.134, 30.701);

var point1 = new OpenLayers.Geometry.Point(104.056, 30.613);var point2 = new OpenLayers.Geometry.Point(104.059, 30.677);var pointList = [];pointList.push(point);pointList.push(point1);pointList.push(point2);var linearRing = new OpenLayers.Geometry.LinearRing(pointList);var geometryCollection=new OpenLayers.Geometry.Collection(

[new OpenLayers.Geometry.Polygon([linearRing])]);var polygonFeature = new

OpenLayers.Feature.Vector(geometryCollection,{},baseStyle);vector.addFeatures([polygonFeature]);

Page 11: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 添加 feature 控制

var sf = new OpenLayers.Control.SelectFeature(vector); map.addControl(sf); sf.activate();

Page 12: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 添加 Marker

var markLayer = new OpenLayers.Layer.Markers (" 标记 ");map.addLayer(markLayer);var lonlat = new OpenLayers.LonLat(lon,lat);var icon = new OpenLayers.Icon(url, sz, offset, null);var marker = new OpenLayers.Marker(lonlat,icon);markLayer.addMarker(marker);marker.events.register('mousedown', marker,

function(evt) {});

Page 13: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 控件添加

map.addControl(new OpenLayers.Control.PanZoomBar({ position: new OpenLayers.Pixel(2, 15)}));// 缩放

map.addControl(new OpenLayers.Control.OverviewMap({ maximized: true})); // 微缩图map.addControl(new OpenLayers.Control.LayerSwitcher());map.addControl(new OpenLayers.Control.Navigation());map.addControl(new OpenLayers.Control.Scale($('scale')));

map.addControl(new OpenLayers.Control.MousePosition());Var draw=new OpenLayers.Control.DrawFeature(

vector, OpenLayers.Handler.RegularPolygon)控件实现的核心是 handler 类,每个控件中都包含对 handler 的引用,通过 active 和 deactive 两个方法,实现动态的激 活和注销。

Page 14: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 事件机制 - 注册和处理事件

1 、 registercontrol.event.register(“eventType”, this, Handler);

2 、 oncontrol.events.on({

eventTYpe: Handler, scope: this

});

Page 15: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• Geotools

Geotools 是 Java 语言编写的开源 GIS 工具包。基于标准的 GIS 接口。 Geotools 主要提供各种 GIS 算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing 实现了地图的简单查看和操作

Page 16: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 读取 shp 文件

File file = new File("C:\\BOUNT_line.shp");FileDataStore store =

FileDataStoreFinder.getDataStore(file);FeatureSource featureSource = store.getFeatureSource();MapContext map = new DefaultMapContext();map.setTitle("Quickstart");map.addLayer(featureSource, null);

Page 17: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• WMS 数据请求解析

URL url = new URL("http://localhost:8089/geoserver/nurc/wms?service=WMS&version=1.1.0&request=GetMap&layers=nurc:Arc_Sample&styles=&bbox=-180.0,-90.0,180.0,90.0&width=660&height=330&srs=EPSG:4326&format=application/openlayers");

WebMapServer wms = new WebMapServer(url);WMSCapabilities caps = wms.getCapabilities();Layer layer = null;for( Iterator i = caps.getLayerList().iterator(); i.hasNext();){

Layer test = (Layer) i.next();if( test.getName() != null && test.getName().length() != 0 ){

layer = test;break;

}}

Page 18: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• WFS// Step 1 - connection parametersMap connectionParameters = new HashMap();connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", "http://localhost:8080/geoserver/wfs?service=WFS&request=GetCapabilities");// Step 2 - connectionDataStore data = DataStoreFinder.getDataStore( connectionParameters );// Step 3 - discouveryString typeNames[] = data.getTypeNames();String typeName = typeNames[0];SimpleFeatureType schema = data.getSchema( typeName );// Step 4 - targetSimpleFeatureSource source = data.getFeatureSource( typeName );// Step 5 - queryString geomName = schema.getGeometryDescriptor().getLocalName();Envelope bbox = new Envelope( -100.0, -70, 25, 40 );FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2( GeoTools.getDefaultHints() );Object polygon = JTS.toGeometry( bbox );Intersects filter = ff.intersects( ff.property( geomName ), ff.literal( polygon ) );Query query = new DefaultQuery( typeName, filter, new String[]{ geomName } );SimpleFeatureCollection features = source.getFeatures( query );

Page 19: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 生成 map 对象生成坐标系CoordinateReferenceSystem crs=CRS.decode("EPSG:900913", false);

实例 map 对象MapContext map = new DefaultMapContext();

添加图层Style stylePL =SLD.createPolygonStyle(Color.decode(borderColor), Color.decode(fillColor), 1.0f);SimpleFeatureCollection fc = FeatureCollections.newCollection();1)map.addLayer(fc , stylePL );MapLayer layer = new DefaultMapLayer(dstore.getFeatureSource(typeName), style);2)map.addLayer(layer );

Page 20: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 生成 GeometryCoordinate[] array = new Coordinate[] {

New Coordinate(lon1,lat1), new Coordinate(lon2,lat2), new Coordinate(lon3,lat3), new Coordinate(lon1,lat1)};

CoordinateSequenceFactory csFactory=CoordinateArraySequenceFactory.instance();

GeometryFactory geomFactory = new GeometryFactory();LinearRing lr=

new LinearRing(csFactory.create(array),geomFactory);Polygon polygon = geomFactory.createPolygon(lr, null);Geometry geometry=polygon;

Page 21: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 生成 Vector gridFile file = new File("E:\\map\\bou1_4p.shp");FileDataStore store = FileDataStoreFinder.getDataStore(file);SimpleFeatureSource ozMapSource = store.getFeatureSource();double gridSize = 10.0;double vertexSpacing = gridSize / 20;MapContext map = new DefaultMapContext();ReferencedEnvelope gridBounds = Envelopes.expandToInclude(ozMapSource.getBounds(), gridSize);SimpleFeatureSource grid = Grids.createSquareGrid(gridBounds, gridSize, vertexSpacing);map.setTitle("Vector grid");map.setCoordinateReferenceSystem(CRS.decode("EPSG:4326", true));map.addLayer(ozMapSource, SLD.createPolygonStyle(Color.BLUE, Color.CYAN, 1.0f));map.addLayer(grid, SLD.createPolygonStyle(Color.LIGHT_GRAY, null, 1.0f));JMapFrame.showMap(map);

Page 22: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 显示

1 、 swingJMapFrame.showMap(map);

Page 23: Geoserver Openlayers Geotools. Geoserver 地图服务器,方便的发布地图数据,允许用户 对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间

GIS 介绍• 显示

2 、输出 image 数据StreamingRenderer sr=new StreamingRenderer();sr.setContext(map);int width=Integer.parseInt(request.getParameter("WIDTH"));int height=Integer.parseInt(request.getParameter("HEIGHT"));BufferedImage bi = new BufferedImage(width, height,

BufferedImage.TYPE_INT_ARGB);Graphics g = bi.getGraphics();Rectangle rect = new Rectangle(0, 0, width, height);sr.paint((Graphics2D) g, rect, mapArea); // 绘制地图PNGEncodeParam encodeParam =

PNGEncodeParam.getDefaultEncodeParam(bi); response.setContentType("image/png"); // 将图像数据输出到 Servlet

ServletOutputStream out=response.getOutputStream();encoder = ImageCodec.createImageEncoder("PNG", out, encodeParam);encoder.encode(bi.getData(), bi.getColorModel());bi.flush();