PostgreSQL earthdistance

2021-09-16 15:42 更新
F.13.1. 基于立方體的地球距離
F.13.2. 基于點的地球距離

earthdistance模塊提供兩種不同的方法來計算地球表面的大圓距離。 第一種要介紹的依賴于cube模塊。第二種基于內(nèi)建的point數(shù)據(jù)類型,為座標使用精度和緯度。

在這個模塊中,地球被假定為完美的球型(如果這對你不夠精確,你可能希望去看看PostGIS項目)。

cube模塊必須在earthdistance之前被安裝。 (盡管你可以使用CREATE EXTENSIONCASCADE選項在一個命令中同時安裝)。

小心

強烈建議將 earthdistancecube安裝在同一模式中,并且該模式的 CREATE 特權(quán)尚未授予且不會授予任何不受信任的用戶。 否則,如果earthdistance的模式包含由敵對用戶定義的對象,則存在安裝時的安全隱患。 此外,在安裝后使用earthdistance的函數(shù)時,整個搜索路徑應僅包含受信任的架構(gòu)。

F.13.1. 基于立方體的地球距離

數(shù)據(jù)被存儲在立方體中,立方體的點(所有的角都一樣)使用 3 個座標表示到地球中心的 x、y 和 z 距離。提供了一個cube之上的域earth,這包括檢查值符合這些限制并且合理地接近于地球的真實表面的約束。

地球的半徑獲得自earth()函數(shù)。其單位是米。但是通過改變這一個函數(shù)你能夠把該模塊改為使用某些其他單位,或者使用一種你認為更合適的不同半徑值。

這個包也有在天文數(shù)據(jù)庫中的應用。天文學家可能想要改變earth()來返回一個180/pi()的半徑,這樣距離就會是度數(shù)。

函數(shù)也被提供來支持經(jīng)緯度輸入(以度數(shù))、經(jīng)緯度輸出、計算兩點間的大圓距離以及容易地指定一個可用于索引搜索的邊界框。

所提供的函數(shù)在表 F.5中描述。

表 F.5. 基于立方體的地球距離函數(shù)

函數(shù)

描述

earth () → float8

返回假定的地球半徑。

sec_to_gc ( float8 ) → float8

將地球表面兩點間的普通直線(切線)距離轉(zhuǎn)換為它們之間的大圓距離。

gc_to_sec ( float8 ) → float8

將地球表面兩點間的大圓距離轉(zhuǎn)換為它們之間的普通直線(切線)距離。

ll_to_earth ( float8, float8 ) → earth

返回以度數(shù)給定的緯度(參數(shù) 1)和經(jīng)度(參數(shù) 2)的點在地球表面上的位置。

latitude ( earth ) → float8

返回地球表面上一個點的緯度(以度數(shù)形式)。

longitude ( earth ) → float8

返回地球表面上的點的經(jīng)度(以度數(shù)形式)。

earth_distance ( earth, earth ) → float8

返回地球表面上兩個點之間的大圓距離。

earth_box ( earth, float8 ) → cube

為一個位置的給定大圓距離范圍內(nèi)的點使用cube@>操作符返回一個適合于索引搜索的框。 這個框中的某些點到該位置的大圓距離會超過指定的大圓距離,因此使用earth_distance的第二次檢查應該被包括在查詢中。


F.13.2. 基于點的地球距離

這個模塊的第二部分依賴于將地球位置表示為類型point的值,其中第一部分被用來表示經(jīng)度數(shù),第二部分被用來表示緯度數(shù)。點被取做 (longitude, latitude) 并且不能反過來,因為經(jīng)度更接近直觀上的 x 軸,而緯度則接近 y 軸。

如表 F.6所示,這一部分只提供了一個單一操作符。

表 F.6. 基于點的地球距離操作符

操作符

描述

point <@> pointfloat8

計算地球表面上兩個點之間以法定英里計算的距離。


注意和這個模塊的基于cube的部分不同,這里的單位是被硬編碼的:改變earth()函數(shù)將不會影響這個操作符的結(jié)果。

經(jīng)度/緯度表示的一個缺點是你需要小心靠近兩極和靠近經(jīng)度正負 180 度處的邊界情況。基于cube的表示可以避免這些不連續(xù)性。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號