usando orb e digitalização de valor personalizada e marshalling
inserindo e reto a pós -geometria com gorm com lata com lata gorm. Para resolver esse problema, os usuários podem aproveitar a biblioteca ORB e implementar os métodos Scan () e Value () para converter entre os tipos GO e o formato binário bem conhecido (WKB) esperado pelo Gorm. Aqui está um exemplo:
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() }
implementando esses métodos em uma estrutura, as funções de varredura e inserção automatizadas de Gorm podem funcionar perfeitamente com os tipos de geometria. Tipo:
err = db.exec (`Criar tabela se não existe trilhas ( Id Chave primária em série, Geometria Geom (Point, 4326) Não nula ); `) .Error se err! = nil { retornar err } err = gormigrate.new (db, gormigrate.defaultOptions, []*gormigrate.migration { { Id: "init", Migrar: func (tx *gorm.db) erro { retornar tx.createTable ( Mesas ..., ).Erro }, }, { ID: "Tracks_except_geom", Migrar: func (tx *gorm.db) erro { Retorne DB.Automigrate (Track {}). Erro }, }, }).Migrar() Esta migração garante que a coluna geometria seja criada antes que o restante da estrutura da tabela seja configurado. { Gorm.model Geometrypoint Ewkbgeompoint `Gorm:" Coluna: geom "` }
Com essa configuração, o Gorm pode inserir e selecionar sem esforço os tipos de geometria do pós -GIS, permitindo o uso contínuo de dados geométricos em aplicativos Go.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3