使用编码函数通过 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中文网其他相关文章!