首頁 >後端開發 >Golang >如何使用 Gorm 插入和選擇 PostGIS 幾何類型?

如何使用 Gorm 插入和選擇 PostGIS 幾何類型?

Susan Sarandon
Susan Sarandon原創
2024-11-05 10:50:02336瀏覽

How can I insert and select PostGIS geometry types with Gorm?

使用Gorm 插入和選擇PostGIS 幾何圖形

使用Orb 和自訂值掃描和編組

插入和檢索PostGIS 幾何圖形Gorm 的類型可能具有挑戰性。為了解決這個問題,使用者可以利用 Orb 函式庫並實作自訂 Scan() 和 Value() 方法,以在 Go 類型和 Gorm 期望的眾所周知的二進位 (WKB) 格式之間進行轉換。以下是一個範例:

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()
}

透過在結構體中實現這些方法,Gorm 的自動掃描和插入功能可以與幾何類型無縫協作。

使用自訂遷移進行表格設定

要建立具有必要幾何列的表,可以使用自訂遷移步驟來設定列類型:

err = db.Exec(`CREATE TABLE IF NOT EXISTS tracks (
    id SERIAL PRIMARY KEY,
    geom geometry(POINT, 4326) NOT NULL
);`).Error
if err != nil {
    return err
}

err = gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
{
    ID: "init",
    Migrate: func(tx *gorm.DB) error {
        return tx.CreateTable(
            Tables...,
        ).Error
    },
},
{
    ID: "tracks_except_geom",
    Migrate: func(tx *gorm.DB) error {
        return db.AutoMigrate(Track{}).Error
    },
},
}).Migrate()

此遷移確保幾何列在其餘列之前建立

使用範例

一旦實現了自訂Scan()、Value() 和遷移步驟,請使用中的幾何類型Gorm 模型變得簡單:

type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}

透過此設置,Gorm 可以輕鬆插入和選擇PostGIS 幾何類型,從而允許在Go 應用程式中無縫使用幾何資料。

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

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