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

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

Barbara Streisand
Barbara Streisand原創
2024-11-05 22:43:02999瀏覽

How to Insert and Select PostGIS Geometry Types with Gorm and EWKB?

使用Gorm 插入和選擇PostGIS 幾何

問題:

在GoGIS 中,使用Gorm 插入和擷取Post 幾何幾何由於Gorm 的自動插入和資料掃描,透過Orb 庫的類型帶來了挑戰。簡單地將二進位資料插入幾何列是不夠的,查詢會傳回十六進位結果。

解決方案:

使用 @robbieperry22 答案作為靈感,一種方法不同的編碼庫消除了位元組操作的需要。

實作:

  1. 為幾何型別建立自訂Scan() 與Value() 方法,類似:
<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>
  1. 使用幾何欄位定義模型結構:
<code class="go">type Track struct {
    gorm.Model
    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>
  1. 自訂表格建立以避免幾何列的預設Gorm 行為:
<code class="go">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
}

// Create table without geom column
mig := gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
    {
        ID: "tracks_except_geom",
        Migrate: func(tx *gorm.DB) error {
            return tx.AutoMigrate(Track{}).Error
        },
    },
}
mig.Migrate()</code>

這種方法可以在EWKB 位元組和PostGIS 幾何類型之間無縫轉換,允許插入和選擇幾何圖形,而無需額外的自訂或手動查詢生成。

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

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