Menggunakan Orb dan Pengimbasan Nilai Tersuai dan Marshalling
Memasukkan dan mendapatkan semula geometri PostGIS jenis dengan Gorm boleh mencabar. Untuk menangani isu ini, pengguna boleh memanfaatkan perpustakaan Orb dan melaksanakan kaedah Scan() dan Value() tersuai untuk menukar antara jenis Go dan format binari (WKB) terkenal yang dijangkakan oleh Gorm. Berikut ialah contoh:
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() }
Dengan melaksanakan kaedah ini dalam struktur, fungsi pengimbasan dan penyisipan automatik Gorm boleh berfungsi dengan lancar dengan jenis geometri.
Penyediaan Jadual dengan Migrasi Tersuai
Untuk mencipta jadual dengan lajur geometri yang diperlukan, penghijrahan tersuai langkah boleh digunakan untuk mengkonfigurasi jenis lajur:
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()
Penghijrahan ini memastikan lajur geometri dibuat sebelum struktur jadual yang lain disediakan.
Contoh Penggunaan
Setelah langkah Scan(), Value() dan migrasi tersuai dilaksanakan, menggunakan jenis geometri dalam model Gorm menjadi mudah:
type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }
Dengan persediaan ini, Gorm boleh memasukkan dan memilih jenis geometri PostGIS dengan mudah, membenarkan penggunaan data geometri yang lancar dalam aplikasi Go.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan dan memilih jenis geometri PostGIS dengan Gorm?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!