Verwenden von Orb und benutzerdefiniertem Wertescannen und Marshalling
Einfügen und Abrufen von PostGIS-Geometrie Typen mit Gorm können eine Herausforderung sein. Um dieses Problem zu beheben, können Benutzer die Orb-Bibliothek nutzen und benutzerdefinierte Scan()- und Value()-Methoden implementieren, um zwischen Go-Typen und dem von Gorm erwarteten bekannten Binärformat (WKB) zu konvertieren. Hier ist ein Beispiel:
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() }
Durch die Implementierung dieser Methoden in einer Struktur können Gorms automatisierte Scan- und Einfügefunktionen nahtlos mit Geometrietypen arbeiten.
Tabelleneinrichtung mit benutzerdefinierter Migration
Um die Tabelle mit der erforderlichen Geometriespalte zu erstellen, kann ein benutzerdefinierter Migrationsschritt verwendet werden, um den Spaltentyp zu konfigurieren:
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()
Diese Migration stellt sicher, dass die Geometriespalte vor dem Rest erstellt wird der Tabellenstruktur ist eingerichtet.
Beispielverwendung
Sobald die benutzerdefinierten Scan()-, Value()- und Migrationsschritte implementiert sind, geben Sie die Geometrie ein Ein Gorm-Modell wird unkompliziert:
type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }
Mit diesem Setup kann Gorm mühelos PostGIS-Geometrietypen einfügen und auswählen, was eine nahtlose Nutzung geometrischer Daten in Go-Anwendungen ermöglicht.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Gorm PostGIS-Geometrietypen einfügen und auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!