Использование SORB и пользовательского сканирования значений и маршаллинга
вставка и извлечения типов геометрии PostGIS с Gorm. Чтобы решить эту проблему, пользователи могут использовать библиотеку ORB и реализовать методы Custom Scan () и Value () для преобразования между типами GO и известным бинарным (WKB) форматом, ожидаемым GORM. Вот пример:
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() }
, реализуя эти методы в структуре, автоматизированное сканирование и вставить функции GORM может легко работать с типами геометрии.
настройка таблицы с помощью пользовательской миграции
, чтобы создать таблицу с необходимой геометрией. type:
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()
Эта миграция гарантирует, что столбец геометрии создается до того, как остальная структура таблицы будет настроена.
пример использования
, как только настраиваемое Scan (), value () и Mygration Shows реализованы, используя тип геометрии в модели Gorm. { Gorm.Model Geometrypoint ewkbgeompoint `gorm:" Column: Geom "` }
type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3