OpenGIS主要架构和类库以及数据源,中间件,客户端,数据格式

OpenGIS(Open Geodata Interoperation Specification,OGIS-开放的地理数据互操作规范),OGC是一个非盈利性组织,目的是促进采用新的技术和商业方式来提高地理信息处理的互操作性(Interoperability),它致力于消除地理信息应用(如地理信息系统,遥感,土地信息系统,自动制图/设施管理(AM/FM)系统)之间以及地理应用与其它信息技术应用之间的藩篱,建立一个无“边界”的、分布的、基于构件的地理数据互操作环境。

OpenGIS定义了一组基于数据的服务,而数据的基础是要素(Feature)。所谓要素简单地说就是一个独立的对象,在地图中可能表现为一个多边形建筑物,在数据库中即一个独立的条目。OpenGIS将几何信息分为点、边缘、面和几何集合四种
通过GIS中间件可以从数据源中取出数据,供WMS服务器和WFS服务器使用。WMS服务器接收请求,根据请求内容的不同,可以返回不同格式的最终数据。WFS服务器也可以接收请求,但WFS将返回GML格式的地理信息数据。

主要架构和类库
几何基础类库
代表: JTS(Java), GEOS(C++), Shapely(Python)
这类几何基础类库主要实现的是OpenGIS的Simple Feature Access标准,简单地说他们就是对几何类型(Geometry)进行了一定程度的封装。

数据源实现
代表:PostGIS(PostgreSQL),MySQL Spatial
数据源的实现主要是开源数据库的空间扩展。数据库的空间扩展不仅仅在数据表中支持几何类型的存储,而且更提供了SQL级别的集合关系判断,例如,可以直接利用SQL查询在某个多边形内的点。PostGIS是加拿大Refractions公司支持的开源项目,它为开源数据库PostgreSQL提供了空间支持。

中间件
代表:GeoTools(Java)
中间件在系统中扮演连接数据和服务的角色。GeoTools承担了从各种数据源(如PostGIS,GML,Shapefile,WFS)读取数据并将数据标准化的工作。Feature接口就定义在GeoTools中,不同数据源的数据读出后被统一成包含一个Geometry成员(定义在JTS中)的Feature接口的实现。这样,进一步的操作只需面向Feature即可,
省去了高层软件对于不同数据源的解读过程。另外,GeoTools还是OpenGIS标准的全面实现,其中包括Filter、坐标转换、GML。

WMS/WFS服务器
Web Map Service(WMS)根据用户的请求返回相应的地图(包括PNG,GIF,JEPG 等栅格数据或者SVG,WEB CGM 矢量数据) 。
代表: GeoServer(Java),MapServer(PHP)
地图服务器扮演向网络中的客户端提供地图服务的角色。这类地图服务器可以接收统一规范的WMS和WFS请求(request),返回多种格式的数据。这个过程有WMS/WFS规范的严格规定,所以,对客户端来说其地图服务器的实现究竟是什么并不会造成太大影响。

客户端
代表:OpenLayers/MapBuilder(JavaScript),uDig(Java),QGIS(C++)
客户端分为浏览器和桌面客户端程序两种。以OpenLayers为代表的B/S系统客户端现在已经非常强大,它可以封装WMS请求,在浏览器上实现地图的切片载入功能。

数据格式
ESRI的Shapefile格式
是GIS矢量文件格式的事实标准,通常由.shp, .shx, .prj, .dbf等文件组成。
OpenGIS的实现软件普遍支持Shapefile的读写。Shapefile在GeoServer中可以直接作为数据源,但是这种方式并不被推荐,原因很简单,基于文件的数据源可能造成性能不佳和数据丢失。

GML
GML是OpenGIS的标准规范之一,它基于xml描述地理数据。同Shapefile相比,xml更容易读写,易于在网络中以各种形式传播。同时,xml还具有可读性,人可以理解和辨识。GeoTools实现了GMLDataStore,因此在GeoServer中GML也可以直接作为数据源

地理应用服务器
Mapinfo MapXtreme MapObject Autodesk Map Guide ArcIMS Super Map ArcGIS Server
MapXtreme是MapInfo公司开发的基于Internet/ Intranet的应用服务器,它具有强大的地图化功能,包括绘制专题地图、缓冲区分析、地图编辑、地图目标查找、地图显示、图层控制、空间选择、地理编码、扩展地图库和示例数据等。管理员只要在Web服务器上对MapXtreme进行编程和管理,用户就能够通过Web浏览器访问到地图信息
————————————————
原文链接:https://blog.csdn.net/newmr0lwq/article/details/86160436

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 GeoTools 读取 tiff 的高程数据可以按照以下步骤进行: 1. 导入 GeoTools 的相关包: ```java import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.coverage.grid.GridCoverageFactory; import org.geotools.coverage.grid.GridCoverageReader; import org.geotools.coverage.grid.GridEnvelope2D; import org.geotools.coverage.grid.InvalidGridGeometryException; import org.geotools.coverage.grid.io.AbstractGridCoverage2DReader; import org.geotools.coverage.grid.io.GridFormatNotFoundException; import org.geotools.coverage.grid.io.GridFormatRegistry; import org.geotools.gce.geotiff.GeoTiffFormat; import org.geotools.geometry.Envelope2D; import org.opengis.coverage.grid.GridCoverage; import org.opengis.parameter.GeneralParameterValue; import org.opengis.parameter.ParameterValue; import org.opengis.parameter.ParameterValueGroup; ``` 2. 创建一个 GeoTiffFormat 对象: ```java GeoTiffFormat geotiff = new GeoTiffFormat(); ``` 3. 通过 GeoTiffFormat 对象获取 GridCoverageReader 对象: ```java AbstractGridCoverage2DReader reader = null; try { reader = (AbstractGridCoverage2DReader) geotiff.getReader(file); } catch (IOException e) { e.printStackTrace(); } ``` 其中,`file` 为 tiff 文件的路径。 4. 通过 GridCoverageReader 对象读取 tiff 文件的高程数据: ```java ParameterValue<AbstractGridCoverage2DReader> input = AbstractGridFormatReader.INPUT_FORMAT_READER .createValue(reader); final ParameterValue<String> name = AbstractGridFormatReader.INPUT_COVERAGE_NAME.createValue(); name.setValue(reader.getCoverageNames()[0]); final GeneralParameterValue[] params = new GeneralParameterValue[2]; params[0] = input; params[1] = name; GridCoverage2D coverage = null; try { coverage = reader.read(params); } catch (IllegalArgumentException | IOException | InvalidGridGeometryException e) { e.printStackTrace(); } ``` 5. 获取高程数据的范围: ```java GridEnvelope2D gridRange2D = coverage.getGridGeometry().getGridRange2D(); int rows = gridRange2D.getSpan(1); int cols = gridRange2D.getSpan(0); ``` 6. 获取高程数据: ```java double[] heights = new double[rows*cols]; int idx = 0; for (int y = 0; y < rows; y++) { for (int x = 0; x < cols; x++) { heights[idx++] = coverage.evaluate(new GridCoordinates2D(x, y)).doubleValue(); } } ``` 其中,`heights` 数组中存储的即为高程数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值