Maison  >  Article  >  développement back-end  >  Comment puis-je utiliser les fonctions d'ENCODAGE avec Gorm pour insérer et sélectionner la géométrie PostGIS ?

Comment puis-je utiliser les fonctions d'ENCODAGE avec Gorm pour insérer et sélectionner la géométrie PostGIS ?

DDD
DDDoriginal
2024-11-07 05:20:03843parcourir

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

Insertion et sélection de géométrie PostGIS avec Gorm à l'aide des fonctions d'ENCODAGE

En récupérant et en insérant des types géométriques à l'aide de Golang et Gorm, en tirant parti de l'orbe et du géojson Les fonctions d'encodage des bibliothèques offrent une solution sans nécessiter la création manuelle de requêtes.

Interrogation à l'aide des fonctions d'encodage

Pour interroger une colonne géométrique avec orb, enveloppez simplement le champ dans ST_AsBinary. function :

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

De même, pour insérer dans une colonne géométrique à l'aide d'un orbe, enveloppez la valeur géométrique de l'orbe dans la fonction ST_GeomFromWKB :

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

Numérisation et stockage à l'aide des fonctions d'encodage

Des méthodes d'analyse et de valeur personnalisées peuvent être implémentées pour les structures Go afin de gérer les données géométriques stockées dans des formats spécifiques.

Par exemple, en utilisant la bibliothèque d'encodage de Geojson :

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

Intégration dans le modèle Gorm

La structure peut ensuite être utilisée comme modèle Gorm, en spécifiant la balise gorm du champ géométrique pour utiliser les méthodes d'analyse et de valeur personnalisées :

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

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

Configuration de la table de base de données

Pour garantir que la colonne géométrique est stockée dans le format approprié, personnalisez la création de la table :

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

Cette approche automatise la gestion des conversion de données géométriques, permettant une insertion et une récupération transparentes à l'aide de Gorm et des fonctions d'encodage spécifiées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn