Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Memasukkan dan Memilih Jenis Geometri PostGIS dengan Gorm dan EWKB?

Bagaimana untuk Memasukkan dan Memilih Jenis Geometri PostGIS dengan Gorm dan EWKB?

Barbara Streisand
Lepaskan: 2024-11-05 22:43:02
asal
1017 orang telah melayarinya

How to Insert and Select PostGIS Geometry Types with Gorm and EWKB?

Memasukkan dan Memilih Geometri PostGIS dengan Gorm

Masalah:

In Go, menggunakan Gorm untuk memasukkan dan mendapatkan semula geometri PostGIS jenis melalui perpustakaan Orb menimbulkan cabaran kerana sisipan automatik dan pengimbasan data Gorm. Memasukkan data perduaan ke dalam lajur geometri sahaja tidak mencukupi, dan pertanyaan mengembalikan hasil hex.

Penyelesaian:

Menggunakan jawapan @robbieperry22 sebagai inspirasi, pendekatan dengan perpustakaan pengekodan yang berbeza menghapuskan keperluan untuk manipulasi bait.

Pelaksanaan:

  1. Buat kaedah Scan() dan Value() tersuai untuk jenis geometri, serupa dengan:
<code class="go">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()
}</code>
Salin selepas log masuk
  1. Tentukan struktur model dengan medan geometri:
<code class="go">type Track struct {
    gorm.Model
    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>
Salin selepas log masuk
  1. Sesuaikan penciptaan jadual untuk mengelakkan tingkah laku Gorm lalai untuk lajur geometri:
<code class="go">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
}

// Create table without geom column
mig := gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{
    {
        ID: "tracks_except_geom",
        Migrate: func(tx *gorm.DB) error {
            return tx.AutoMigrate(Track{}).Error
        },
    },
}
mig.Migrate()</code>
Salin selepas log masuk

Pendekatan ini menukar dengan lancar antara bait EWKB dan jenis geometri PostGIS, membenarkan pemasukan dan pemilihan geometri tanpa penyesuaian tambahan atau penjanaan pertanyaan manual.

Atas ialah kandungan terperinci Bagaimana untuk Memasukkan dan Memilih Jenis Geometri PostGIS dengan Gorm dan EWKB?. 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