Geotools与OGC(一)
博主本身是從事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), | { "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), | ? { "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)), | ? { "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)), | { "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(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 韩顺平老师QQ离线消息
- 下一篇: OGC 网络数据服务的类型与操作+实现G