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
Barbara Streisandasal
2024-11-05 22:43:02999semak imbas

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>
  1. Tentukan struktur model dengan medan geometri:
<code class="go">type Track struct {
    gorm.Model
    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>
  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>

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!

Kenyataan:
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