首页 > 后端开发 > Golang > 正文

如何使用 Gorm 的 ENCODING 函数来插入和选择 PostGIS 几何图形?

DDD
发布: 2024-11-07 05:20:03
原创
842 人浏览过

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

使用编码函数通过 Gorm 插入和选择 PostGIS 几何

在使用 Golang 和 Gorm 检索和插入几何类型时,利用 orb 和 geojson库的编码函数提供了一种无需手动构建查询的解决方案。

使用编码函数进行查询

要使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板