Postgresql

GIS點還是離散的經度和緯度列?

  • November 9, 2017

我看到 Point 類型是用來儲存幾何座標的,但是我看不出它試圖解決什麼問題,或者它比簡單地使用兩個數值列提供了什麼優勢。它是 16 字節,那麼它只是兩個 8 字節浮點數的抽象嗎?或者它是一個包含某種 geohash 的字元串,可以優化某些查詢的性能?

假設我想在 Leaflet 地圖上獲取特定視口的所有點…用數字列表示緯度和經度,我只需過濾所有緯度數介於 N/S 邊界和 a 之間的行東西邊界之間的經度數,很容易。我研究過在這裡使用 Point,但語法很麻煩,而且在我看來,開發和數據庫性能的成本是不必要的……是嗎?

幾個優點,

  • 標準化它由開放地理空間聯盟 (OGC)標準化

  • 使用點的鍵入函式被稱為接受點。所以它有利於打字和與其他庫一起工作。例如,如果您需要查找適用於某個點的函式,請在空間關係和測量的索引中搜尋“點”(您現在可以在瀏覽器中執行此操作)。

  • 在您可以索引複合類型的同時進行索引:(SRID,long,lat)將有一個非常複雜的時間來定義合理的排序和復合類型上的自定義 r-tree 索引。

  • 包含 SRID一個點包含一個空間參考系統 (SRID),如果沒有它,您將無法在地球上放置座標,因為您不知道您使用的地球模型。

  • 缺乏獨立的經緯度和經度本身沒有任何意義:什麼是緯度:-5.28593 沒有相應的縱向座標。而且,即使在一起,如果沒有 SRID,它們也毫無意義。

  • Nd A Point可以可選地包括第三維或第四維。因此,即使在高維空間中,它也始終是一個點。

    • 高度?沒問題(3dz)。
    • 2d 與時間?沒問題 (3dm)
    • 3d 和時間?不是問題。歡迎來到 4d

它還使用 Well-known Text 提供與文本之間的標準化強制轉換,並使用 Well-known Binary 提供與二進制之間的標準化強制轉換。

因為它適用於您的傳單範例,

使用代表緯度和經度的數字列,我只需過濾所有在 N/S 邊界之間具有緯度數和在 E/W 邊界之間具有經度數的行,很容易。

首先,你不能。當您向極點移動時,經度的一度會收斂到 0。其次,即使你可以,它也會很複雜。而是考慮 GIS 方法,

SELECT *
FROM table
WHERE ST_DWithin( ST_Point(x,y)::geography, distance_in_meters );

距離以米為單位!那是多麼美好。;)

引用自:https://dba.stackexchange.com/questions/190477