首頁  >  文章  >  後端開發  >  如何使用 Gorm 的 ENCODING 函數來插入和選擇 PostGIS 幾何圖形?

如何使用 Gorm 的 ENCODING 函數來插入和選擇 PostGIS 幾何圖形?

DDD
DDD原創
2024-11-07 05:20:03843瀏覽

How can I use ENCODING Functions with Gorm to Insert and Select PostGIS Geometry?

使用編碼函數透過Gorm 插入和選擇PostGIS 幾何

使用Golang 和Gorm 檢索和插入幾何類型時,利用orb 和ojgeojson庫的編碼函數提供了一種無需手動建立查詢的解決方案。

使用編碼函數進行查詢

要使用orb 查詢幾何列,只需將欄位包裝在ST_AsBinary 中函數:

rows, err := db.Query("SELECT id, name, ST_AsBinary(geom) FROM orbtest LIMIT 1")

類似地,要使用orb 插入幾何列,請將orb 幾何值包裝在ST_GeomFromWKB 函數中:

db.Exec("INSERT INTO orbtest (id, name, geom) VALUES (, , ST_GeomFromWKB())", 1, "Test", wkb.Value(p))

使用編碼函數掃描和儲存

Go 結構體可以實作自訂的scan 和value 方法來處理以特定格式儲存的幾何資料。

例如,使用geojson 的編碼庫:

<code class="go">type EWKBGeomPoint geom.Point

func (g *EWKBGeomPoint) Scan(input interface{}) error {
    gt, err := ewkb.Unmarshal(input.([]byte))
    if err != nil {
        return err
    }
    g = gt.(*EWKBGeomPoint)

    return nil
}

func (g EWKBGeomPoint) Value() (driver.Value, error) {
    b := geom.Point(g)
    bp := &b
    ewkbPt := ewkb.Point{Point: bp.SetSRID(4326)}
    return ewkbPt.Value()
}</code>

整合到Gorm 模型

然後該結構體可以用作Gorm 模型,指定幾何欄位的gorm 標籤以使用自訂掃描和值方法:

<code class="go">type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>

資料庫表設定

為了確保幾何列以適當的格式存儲,請自定義表建立:

<code class="go">err = db.AutoMigrate(Track{}).Error</code>

此方法自動處理幾何資料轉換,使用Gorm 和指定的編碼函數實現無縫插入和檢索。

以上是如何使用 Gorm 的 ENCODING 函數來插入和選擇 PostGIS 幾何圖形?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn