CnosDB 在最近新發布的 2.4.0 版本中增加對時空函式的支援。
概述
時空函式是一種用於描述時空結構和演化的函式。它在物理學、數學和電腦科學等領域中都有廣泛的應用。時空函式可以描述物體在時空中的位置、速度、加速度以及其他相關屬性。
用法
CnosDB 將使用一種全新的資料型別 Geometry來支援地理資訊系統。
建立表的時候可以指定列的型別為Geometry:
create table geo_table ( geo geometry(<object_type>, ) );
目前 CnosDB 中使用 WKT 格式來儲存Geometry型別,Geometry型別下有 7 種幾何物件:
WKT 是是一種開放的國際標準,全拼為 Well-Known Text 。
示例
支援函式
為了更好地操縱 Geometry 型別,CnosDB 提供了 ST_Geometry SQL 系列的函式,來計算幾何體的性質和幾何體之間的關係
ST_AsBinary(geometry)
將幾何物件轉換為 WKB 格式,WKB 格式是由 OpenGIS 規範定義的,用於以二進位制流的形式交換幾何資料,二進位制流由含幾何 WKB 資訊的 BLOB 值表示。
引數型別:Geometry
返回型別:Binary
示例:
select ST_AsBinary('POINT (1 1)')
返回結果為16進位制:
+--------------------------------------------+| st_AsBinary(Utf8("POINT (1 1)")) | +--------------------------------------------+| 0101000000000000000000f03f000000000000f03f | +--------------------------------------------+
第一個位元組表示資料的位元組序:01
後面4個位元組表示物件的幾何型別 :01000000
POINT的值X和Y用8位元組double型別的資料表示:000000000000F03F,000000000000F03F
ST_GeomFromWKB
功能:把WKB格式二進位制轉為Geometry型別
引數型別: Binary
返回型別: Geometry
示例:
SELECT ST_GeomFromWKB(ST_AsBinary('POINT(0 3)'))
返回的結果:
+-------------------------------------------------+| st_GeomFromWKB(st_AsBinary(Utf8("POINT(0 3)"))) | +-------------------------------------------------+| POINT(0 3) | +-------------------------------------------------+
ST_Distance(geometry1, geometry2)
功能: ST_Distance 返回兩個幾何體的 2D 投影之間的最小歐氏距離。
引數型別:Binary
返回型別: Double
示例:
兩點間距離
SELECT ST_Distance('POINT(1 0)', 'POINT(0 0)',); +----------------------------------------------------+| st_distance(Utf8("POINT(1 0)"),Utf8("POINT(0 0)")) | +----------------------------------------------------+| 1.0 | +----------------------------------------------------+
返回結果:
+----------------------------------------------------+| st_distance(Utf8("POINT(1 0)"),Utf8("POINT(0 0)")) | +----------------------------------------------------+| 1.0 | +----------------------------------------------------+
點到直線距離
SELECT ST_Distance('POINT(0 0)', 'LINESTRING (30 10, 10 30, 40 40)');
返回結果:
+--------------------------------------------------------------------------+| st_distance(Utf8("POINT(0 0)"),Utf8("LINESTRING (30 10, 10 30, 40 40)")) | +--------------------------------------------------------------------------+ | 28.284271247461902 | +--------------------------------------------------------------------------+
平面和平面之間的距離
SELECT ST_Distance('POLYGON((0 2,1 1,0 -1,0 2))', 'POLYGON((-1 -3,-2 -1,0 -3,-1 -3))') as distance;
返回結果
+--------------------+| distance |+--------------------+| 1.4142135623730951 |+--------------------+
ST_Area(geometry)
功能:返回幾何物件 2D 投影的笛卡爾面積。面積單位與用於表示輸入幾何體座標的單位相同。 對於點、線串、多點和多線串,此函式返回 0。 對於幾何體集合,它返回集合中幾何體的面積之和。
引數型別: Geometry
返回型別: Double
示例:
SELECT ST_Area('POLYGON ((40 40, 20 45, 45 30, 40 40))') as area;+------+| area | +------+ | 87.5 | +------+
返回結果
+------+| area |+------+| 87.5 |+------+
注意:部分幾何圖形不支援計算面積,對這些幾何體計算面積會返回 0,如:Point、MultiPoint、LineString、MultiLineString、Line。 如果引數內容格式非法,返回值為 NULL。
案例:物聯網場景監控車輛駛入電子圍欄
下面有一張表 car。
表car記錄車輛的實時位置, id 指示一輛車, location 是車的實時座標。
create table car ( location: geometry(point, 0), tags(id) );
這裡有一種圓形的電子圍欄,座標為117.20, 39.12, 半徑為0.0008。
1.計算此時電子圍欄中的車輛數量
select count(*)from( select max(time), id, location from car group by id, location )where st_distance(location, 'POINT (117.20, 39.12)') < 0.0008;
首先透過max 聚合時間列,找到每輛車最新的位置記錄,
然後使用 空間函式 st_distance 找到離電子圍欄距離小於電子圍欄半徑的車輛 ,最後使用 count計算數量。
2.計算車 A5678 的進入電子圍欄的時間以及最後在電子圍欄內的時間。
select min(time), max(time) from car where id = 'A5678' and st_distance(location, 'POINT (117.20, 39.12') < 0.0008;
透過 id 篩選出指定車的記錄,再使用 空間函式st_distance過濾出該車座標在電子圍欄中的記錄,最後使用 min max 聚合函式找出時間。
以上就是 CnosDB2.4 關於時空函式的功能,你可以利用這些功能來處理和分析時空資料,使用時空函式可以幫助你解決許多與地理位置相關的問題,無論是在物流規劃、位置分析、地理資訊系統還是其他領域,都可以從時空資料中提取有價值的資訊,幫助您做出更明智的決策,最佳化業務流程,並提供更好的服務。
無論您是專業的地理資訊系統專家,還是對地理位置資料感興趣的普通使用者,時空函式都將為您提供強大而有用的查詢和分析工具。讓我們一起利用時空函式,挖掘地理資料的無限潛力!歡迎加入這個精彩的時空分析的世界!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026635/viewspace-2999015/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- go-carbon 2.1.0 版本釋出, 增加對 go1.18 版本的相容支援Go
- go-carbon 1.1.0版本釋出了,增加對gorm的支援GoORM
- CnosDB 狂歡!全面支援 Helm 部署,輕鬆搞定你的分散式時序資料庫!分散式資料庫
- 微軟宣佈未來Win10版本中將增加DoH協議支援:同時保留對DoT支援微軟Win10協議
- TS 基礎及在 Vue 中的實踐:TypeScript 都發布 5.0 版本啦,現在不學更待何時!VueTypeScript
- go-carbon 1.1.0版本釋出了,php carbon時間處理庫的golang版,增加對gorm的支援PHPGolangORM
- Google Chrome 將增加對 HTTP Exchanges 的支援GoChromeHTTP
- OpenKruise v0.5.0 版本釋出,支援無損的流式分批發布策略UI
- VS2022 csproject檔案增加發布時檔案項Project
- CnosDB:深入瞭解時序資料處理函式函式
- 【外掛更新日誌】新發布的1.5.0版本外掛中的增強模式,作用幾何?模式
- go-carbon 1.1.2版本釋出了,修復已知錯誤,增加對農曆的支援Go
- vscode外掛liveserver增加對thymeleaf模板的簡單支援VSCodeServer
- Rust for Linux 新補丁:為 Linux 核心增加對 Rust 作為第二語言的支援RustLinux
- Mesosphere在其資料中心作業系統中增加了對Kubernetes的支援作業系統
- 如何在呼叫Marketing Cloud contact建立API時增加對擴充套件欄位的支援CloudAPI套件
- CameraX 1.1 有哪些新的特性發布?
- 【必看】TensorFlow 2.4.0 候選版本釋出
- Xcode10.2中LLDB增加的新特性XCodeLLDB
- Kruise Rollout v0.2.0 版本釋出:支援 Gateway API、StatefulSet 分批發布等能力UIGatewayAPI
- PHP最近的6個版本到底多了啥?PHP
- [轉載] Java7中增加的新特性Java
- react 16.8版本新特性以及對react開發的影響React
- View UI Plus 釋出 1.1.0 版本,支援 SSR、支援 Nuxt、增加 TS 宣告檔案ViewUIUX
- React 16.4新特性發布React
- 網友熱議,中興低調發布全新版本新支點國產系統
- 最新win10測試版Build 18305增加對顏文字的支援Win10UI
- FMEA在數字化時代的創新發展
- vue cli(webpack)增加發布到測試環境VueWeb
- 新網漫時代下的國漫“哥倫布”征程
- 關於 Angular 開發時對主流瀏覽器支援的話題Angular瀏覽器
- WebAPI+Html跨域時對session的支援WebAPIHTML跨域Session
- spark sql在當前的時間戳下增加8個小時SparkSQL時間戳
- 自動增加 Android App 的版本號AndroidAPP
- CrowdStrike:2021年針對Linux發行版本的惡意軟體數量同比增加35%Linux
- Java最新發布版本有哪些變化?Java
- CnosDB的資料更新和刪除
- 微軟確認本週不會發布任何新的win10預覽版系統版本微軟Win10