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
Susan SarandonOriginal
2024-11-05 10:50:02336Durchsuche

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()
}

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!

Stellungnahme:
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