«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу вставить и выбрать типы геометрии PostGIS с GORM?

Как я могу вставить и выбрать типы геометрии PostGIS с GORM?

Опубликовано в 2025-03-23
Просматривать:639

How can I insert and select PostGIS geometry types with Gorm?

вставка и выбор геометрии Postgis с Gorm

Использование 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