博主本身是从事GIS研发工作的,主要以Java进行GIS相关的空间分析研发作业,那么在Java中比较时兴的开源包Geotools自然少不了(主要是我也一直在以geotools进行研发作业,中间也会用到esri-geometry进行一些空间数据的处理,这两个包在空间数据的处理上各自是有不同的,其中的各种厉害以后有机会我们可以慢慢一起来探讨)。哼哼。。。好回归正题,博主毕业时间不长,从事GIS研发工作的年月更是屈指可数(毕竟年轻嘛  ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄  。。。。),这个系列我就以geotools为主,分享的同时也是在提升自己在此方面的学识。

geotools在编写时对OGC标准进行了相当的实现,其中相当部分的基础是基于JTS这个开源包的。本篇从常用的一些OGC标准出发,结合geotools来一起进行相关介绍和学习。

我们就按照如下地址罗列的一些标准来讲解吧 https://www.osgeo.cn/doc_ogcstd/ ,完整的OGC标准有非常多的内容具体可以到https://www.ogc.org/standards/ 进行查看。

开篇前先说下OGC标准是个啥,首先“Open Geospatial Consortium (OGC)开放地理空间信息联盟,他们在全球范围内合作建立地理信息技术的开放标准和最佳实践,为地理信息交换的便捷提供技术支持。”,然后其实OGC这个组织所订立的这个OGC标准吧,也不是什么强制性的标准,大家都知道这个世界上做地理信息服务的企业so much,在当前全球一体化的时代下,要是没有一个统一的交互格式或者说是标准,那么各个服务商或者企业之间的数据(信息)的交互将会是困难的,所以在GIS的这个行业下,大家也都默默的参照了OGC标准进行各种开发个人觉得主要的目的之一也是为了方便各个厂商之间的数据进行交互。好了,总之OGC标准的简单介绍就是这么简单,如果你还有疑问,很好,请自行百度进行脑补。。。。

我们先看下本系列要介绍的内容:

  • 1. OGC标准介绍

    • 1.1. I. OGC 与 OGC 标准
    • 1.2. II. SFS-简单要素标准
    • 1.3. III. GML-地理标记语言
    • 1.4. IV. SLD-图层样式描述
    • 1.5. V. KML-我从 Google 来
    • 1.6. VI. OWS-OGC Web 服务通用标准
    • 1.7. VII. WFS-要素 Web 服务
    • 1.8. VIII. WMS-地图 Web 服务
    • 1.9. IX. WCS-栅格 Web 服务
    • 1.10. X. WMTS-切片地图 Web 服务
    • 1.11. XI. 附录:ArcGIS 支持的 OGC 标准列表
  • 2. OpenGIS中文文档
    • 2.1. 前言
    • 2.2. 概述
    • 2.3. 开放GIS概述
    • 2.4. 技术对象和目的
    • 2.5. 信息行业地理处理交互性的基础
    • 2.6. 开放GIS总体规范

1.1.Ⅰ我上面就算讲完了。。。因为是结合geotools来看,我知道你们也更注重干货,话不多说直接1.2.Ⅱ SFS-简单要素标准。

SFS包含如下内容:

  • 1.2.1. 概述
  • 1.2.2. 几何对象模型
  • 1.2.3. WKT 描述的几何对象
  • 1.2.4. WKB 描述的几何对象
  • 1.2.5. WKT 描述的空间参考
  • 1.2.6. SQL 预定义 schema
  • 1.2.7. SQL 几何对象存储
  • 1.2.8. SQL 空间操作

这里面既是对常用的一些要素格式进行描述。这是介绍中的几何模型图:

既然是参照了OGC标准进行实现,那么在geotools中自然也能找到对应的实现类,在开发商geotools的包可以去https://geotools.org/ 中下载,当然也可以去maven仓库中进行配置。

从图中我们可以知道Geometry是所有图形内的基类,首先从WKT开始介绍:

Type

Shape

WKT

GeoJSON

Point

 

POINT (30 10)

{ "type": "Point", "coordinates": [30, 10] }

LineString

 

LINESTRING (30 10, 10 30, 40 40)

{ "type": "LineString", "coordinates": [ [30, 10], [10, 30], [40, 40] ] }

Polygon

 

POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))

{ "type": "Polygon", "coordinates": [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] }

 

POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30))

{ "type": "Polygon", "coordinates": [ [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]], [[20, 30], [35, 35], [30, 20], [20, 30]] ] }

MultiPoint

  

MULTIPOINT ((10 40), (40 30), (20 20), (30 10))

{ "type": "MultiPoint", "coordinates": [ [10, 40], [40, 30], [20, 20], [30, 10] ] }

MULTIPOINT (10 40, 40 30, 20 20, 30 10)

MultiLineString

 

MULTILINESTRING ((10 10, 20 20, 10 40),
(40 40, 30 30, 40 20, 30 10))

{ "type": "MultiLineString", "coordinates": [ [[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]] ] }

MultiPolygon

 

MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),
((15 5, 40 10, 10 20, 5 10, 15 5)))

{ "type": "MultiPolygon", "coordinates": [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] }

MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),
((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),
(30 20, 20 15, 20 25, 30 20)))

{ "type": "MultiPolygon", "coordinates": [ [ [[40, 40], [20, 45], [45, 30], [40, 40]] ], [ [[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]] ] ] }

上面这张表我是从https://blog.csdn.net/xcymorningsun/article/details/89848096 里面借用过来的,WKT的格式当然不仅限于上面这些,从第一张几何模型图中我们知道其实还包含诸多的类型。

我们知道构建要素的基本单元是点,在geotools中最基本的就是Coordinate类,这其实就是一个点相关的类,通过这个类我们可以去构建Point,LineString等等,那么你可能就会问,既然是点,为什么不直接用Point这个类还非要用Coordinate,从源码上得出的结论就是,Coordinate类是独立的存储点信息,不包含坐标系等空间参考内容,而Point是Geometry的子类,且一个正常的Point类应该是包含空间参考的信息的(当然这不是使用这个类的必要条件):

好像有走远了,说回WKT吧,从格式上可以看出Point对应的WKT是单括号的也就是这样 (30 10),那么基于点构建的线是这样(30 10, 10 30, 40 40),看出来没有,线就是N个points的集合,因此一个线段是由最少两个点构成,x,y之间以一个空格分隔,点之间以逗号分隔,那么再看下面的构建 ((30 10, 40 40, 20 40, 10 20, 30 10)),在线的基础上多套上了一个括号,那么为什么会套上这层括号呢,别急再看下下面这个面的构建POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),
(20 30, 35 35, 30 20, 20 30)),这个面是带有孔的面,也就是中间被挖了一块,通过双括号的形式可以很好的区分出一个面是否有孔,且注意观察,孔与面之间是有确切的顺序的。随着后续博文的讲解,我会对要素的构成及拆解情况进行更深入的说明,作为系列的开头本篇先暂止于此,后续的分享上我会注重于干货的讲解。

Geotools与OGC(一)相关推荐

  1. Geotools与OGC(三)----WKB几何信息读取

    WKB(Well-known Binary)采用一种二进制的形式来描述几何对象. 在geotools中也提供了对应的方法来对WKB进行读/写: String wktPoint = "POIN ...

  2. java cqlfilter_Geoserver系列:将CQL转换OGC的xml过滤

    在Geoserver的wfs查询中,支持CQL的数据查询过滤,但是常用的OGC的查询中,是以post的形式,通过传递一个xml文件的格式,返回查询数据的结果.这在arcgis server,sfs s ...

  3. 简析服务端通过geotools导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  4. Geotools简介以及quickstsrt加载shp文件并显示

    场景 Geotools Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现. 而OGC是国际标准,所以geoto ...

  5. python如何使用geotools_基于GeoTools实现道路结点的提取

    最近公司的地图业务数据换了供应商,由于在进行路径规划的时候需 要使用到道路结点进行图的构建,因而需要根据道路图层提取出道路的节点.因为经常使用arcpy,所以先用python写了个版本,通常将数据放在 ...

  6. geoTools学习笔记001---(简介)

    需要做地图开发,如果全部从底层做起,那将会花费大量的精力,况且难度很大,所以要使用现成的开发平台,经过几天的了解: 商业版GIS开发平台:arcgis/mapinfo/--,如果做web地图,可以使用 ...

  7. GeoTools——读取shapefile数据

    目录 一.引言 二.代码操作 1.服务端 2.返回数据 3.客户端 三.总结 一.引言 GeoTools在开源gis世界中使用极为常见,地位类比于arcgis中的arcgis engine,当我们要使 ...

  8. java使用geotools读取shp文件

    java使用geotools读取shp文件 测试shp文件 引入geotools包 压缩包文件处理 shp文件相关信息的读取 运行结果 GeoTools是一个开源的Java GIS工具包,可利用它来开 ...

  9. geotools应用-JTS生产四叉树索引和R树索引

    微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 geotools介绍 geotools官网https://geotools.org/ Geotools是一个java类 ...

最新文章

  1. C++中MessageBox()的详细用法(转载)
  2. labview除了全局变量还有别的办法_地中海贫血除了移植,还有什么办法?
  3. mysql oneproxy_利用oneproxy实现mysql读写分离搭建笔记
  4. Java:用POI读写Excel
  5. 算法 --- 二叉树查找树的先序(中序、后序)遍历的js实现
  6. 【解决】insert 语句无效果,在查询中正常运行问题
  7. 手机局域网html,手机遥控电脑开机神器!局域网唤醒App
  8. 兼容浏览器的insertAdjacentHTML
  9. Daily Report 2012.11.06 刘宇翔
  10. python编程是啥-什么是Python
  11. 1022. Genealogical Tree(topo)
  12. RFID技术如何管理图书馆
  13. 机器学习 - 训练集、验证集、测试集
  14. 实例——领域驱动设计DDD
  15. 安装了58款app的你,该如何记住所有密码?
  16. 计算机能不能升级固态硬盘,老电脑可以用固态硬盘吗?老电脑升级安装固态硬盘的注意事项...
  17. 如何做好笔记以及记好笔记的好处
  18. 如何在完全不懂服务器开发的情况下做一个实时联网对战的微信小游戏
  19. 超越阿里达摩院成绩,这个斯坦福团队用“国产求解器”助中国企业实现智能决策|快公司...
  20. JAVA计算机毕业设计新疆旅游专列订票系统Mybatis+源码+数据库+lw文档+系统+调试部署

热门文章

  1. python 训练识别验证码_python使用tensorflow深度学习识别验证码
  2. 手感虽重要,工具更可靠|SunTorque智能扭矩系统
  3. FileReader()在js中的使用
  4. 多系统U盘启动盘的制作,成功启动win8PE,ubuntu,deepin2013,deepin2014,以及通过U盘启动电脑已装系统。
  5. 方便好用的通知短信API
  6. 银行金融领域,如何利用数据挖掘对客户进行深入分析?
  7. 银行系统软件测试的目的,商业银行软件缺陷管理与风险评估
  8. 开机出现all boot options are tried 三星笔记本修复方案
  9. 关于获取上传图片的长和宽
  10. 程序员的故事 001 小眼镜入职