Masalah:
In Go, menggunakan Gorm untuk memasukkan dan mendapatkan semula geometri PostGIS jenis melalui perpustakaan Orb menimbulkan cabaran kerana sisipan automatik dan pengimbasan data Gorm. Memasukkan data perduaan ke dalam lajur geometri sahaja tidak mencukupi, dan pertanyaan mengembalikan hasil hex.
Penyelesaian:
Menggunakan jawapan @robbieperry22 sebagai inspirasi, pendekatan dengan perpustakaan pengekodan yang berbeza menghapuskan keperluan untuk manipulasi bait.
<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>
Pendekatan ini menukar dengan lancar antara bait EWKB dan jenis geometri PostGIS, membenarkan pemasukan dan pemilihan geometri tanpa penyesuaian tambahan atau penjanaan pertanyaan manual.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan dan Memilih Jenis Geometri PostGIS dengan Gorm dan EWKB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!