首页 >后端开发 >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