Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich ENCODING-Funktionen mit Gorm verwenden, um PostGIS-Geometrie einzufügen und auszuwählen?

Wie kann ich ENCODING-Funktionen mit Gorm verwenden, um PostGIS-Geometrie einzufügen und auszuwählen?

DDD
DDDOriginal
2024-11-07 05:20:03834Durchsuche

How can I use ENCODING Functions with Gorm to Insert and Select PostGIS Geometry?

Einfügen und Auswählen von PostGIS-Geometrie mit Gorm unter Verwendung von ENCODING-Funktionen

Beim Abrufen und Einfügen geometrischer Typen mit Golang und Gorm unter Nutzung von Orb und Geojson Die Codierungsfunktionen der Bibliotheken bieten eine Lösung, ohne dass eine manuelle Abfrage erforderlich ist Gebäude.

Abfragen mithilfe von Codierungsfunktionen

Um eine Geometriespalte mit Orb abzufragen, schließen Sie das Feld einfach in die ST_AsBinary-Funktion ein:

rows, err := db.Query("SELECT id, name, ST_AsBinary(geom) FROM orbtest LIMIT 1")

Um mit Orb in eine Geometriespalte einzufügen, schließen Sie den Orb-Geometriewert in ST_GeomFromWKB ein Funktion:

db.Exec("INSERT INTO orbtest (id, name, geom) VALUES (, , ST_GeomFromWKB())", 1, "Test", wkb.Value(p))

Scannen und Speichern mithilfe von Kodierungsfunktionen

Benutzerdefinierte Scan- und Wertmethoden können für Go-Strukturen implementiert werden, um in bestimmten Formaten gespeicherte Geometriedaten zu verarbeiten.

Zum Beispiel die Verwendung der Geojson-Kodierung Bibliothek:

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

In das Gorm-Modell integrieren

Die Struktur kann dann als Gorm-Modell verwendet werden, indem das Gorm-Tag des Geometriefelds für die Verwendung des benutzerdefinierten Scans angegeben wird und Wertmethoden:

<code class="go">type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>

Datenbanktabelle Einrichtung

Um sicherzustellen, dass die Geometriespalte im richtigen Format gespeichert wird, passen Sie die Tabellenerstellung an:

<code class="go">err = db.AutoMigrate(Track{}).Error</code>

Dieser Ansatz automatisiert die Verarbeitung der Geometriedatenkonvertierung und ermöglicht so ein nahtloses Einfügen und Abruf mit Gorm und den angegebenen Kodierungsfunktionen.

Das obige ist der detaillierte Inhalt vonWie kann ich ENCODING-Funktionen mit Gorm verwenden, um PostGIS-Geometrie einzufügen und auszuwä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