Heim > Backend-Entwicklung > Golang > Wie kann ich mit Gorm PostGIS-Geometrietypen einfügen und auswählen?

Wie kann ich mit Gorm PostGIS-Geometrietypen einfügen und auswählen?

Susan Sarandon
Freigeben: 2024-11-05 10:50:02
Original
341 Leute haben es durchsucht

How can I insert and select PostGIS geometry types with Gorm?

Einfügen und Auswählen von PostGIS-Geometrie mit Gorm

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()
}
Nach dem Login kopieren

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()
Nach dem Login kopieren

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"`
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage