Bagaimanakah saya boleh memasukkan dan memilih jenis geometri PostGIS dengan Gorm?

Susan Sarandon
Lepaskan: 2024-11-05 10:50:02
asal
259 orang telah melayarinya

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

Memasukkan dan Memilih Geometri PostGIS dengan Gorm

Menggunakan Orb dan Pengimbasan Nilai Tersuai dan Marshalling

Memasukkan dan mendapatkan semula geometri PostGIS jenis dengan Gorm boleh mencabar. Untuk menangani isu ini, pengguna boleh memanfaatkan perpustakaan Orb dan melaksanakan kaedah Scan() dan Value() tersuai untuk menukar antara jenis Go dan format binari (WKB) terkenal yang dijangkakan oleh Gorm. Berikut ialah contoh:

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()
}
Salin selepas log masuk

Dengan melaksanakan kaedah ini dalam struktur, fungsi pengimbasan dan penyisipan automatik Gorm boleh berfungsi dengan lancar dengan jenis geometri.

Penyediaan Jadual dengan Migrasi Tersuai

Untuk mencipta jadual dengan lajur geometri yang diperlukan, penghijrahan tersuai langkah boleh digunakan untuk mengkonfigurasi jenis lajur:

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()
Salin selepas log masuk

Penghijrahan ini memastikan lajur geometri dibuat sebelum struktur jadual yang lain disediakan.

Contoh Penggunaan

Setelah langkah Scan(), Value() dan migrasi tersuai dilaksanakan, menggunakan jenis geometri dalam model Gorm menjadi mudah:

type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}
Salin selepas log masuk

Dengan persediaan ini, Gorm boleh memasukkan dan memilih jenis geometri PostGIS dengan mudah, membenarkan penggunaan data geometri yang lancar dalam aplikasi Go.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan dan memilih jenis geometri PostGIS dengan Gorm?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!