问题:
在 Go 中,使用 Gorm 插入和检索 PostGIS 几何由于 Gorm 的自动插入和数据扫描,通过 Orb 库的类型带来了挑战。简单地将二进制数据插入到几何列中是不够的,查询会返回十六进制结果。
解决方案:
使用 @robbieperry22 答案作为灵感,一种方法不同的编码库消除了字节操作的需要。
<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>
<code class="go">type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }</code>
<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中文网其他相关文章!