Maison > Article > développement back-end > Comment puis-je insérer et sélectionner des types de géométrie PostGIS avec Gorm ?
Utiliser l'analyse et le regroupement d'orbes et de valeurs personnalisées
Insérer et récupérer la géométrie PostGIS les types avec Gorm peuvent être difficiles. Pour résoudre ce problème, les utilisateurs peuvent exploiter la bibliothèque Orb et implémenter les méthodes Scan() et Value() personnalisées pour convertir entre les types Go et le format binaire bien connu (WKB) attendu par Gorm. Voici un exemple :
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() }
En implémentant ces méthodes dans une structure, les fonctions automatisées d'analyse et d'insertion de Gorm peuvent fonctionner de manière transparente avec les types de géométrie.
Configuration de table avec migration personnalisée
Pour créer la table avec la colonne géométrique nécessaire, une étape de migration personnalisée peut être utilisée pour configurer le type de colonne :
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()
Cette migration garantit que la colonne géométrique est créée avant le reste de la structure de la table est configurée.
Exemple d'utilisation
Une fois les étapes personnalisées Scan(), Value() et de migration implémentées, en utilisant le type de géométrie dans un modèle Gorm devient simple :
type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }
Avec cette configuration, Gorm peut facilement insérer et sélectionner des types de géométrie PostGIS, permettant une utilisation transparente des données géométriques dans les applications Go.
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!