Gorm を使用して PostGIS ジオメトリ タイプを挿入および選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-05 10:50:02
オリジナル
260 人が閲覧しました

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

Gorm を使用した PostGIS ジオメトリの挿入と選択

Orb とカスタム値のスキャンとマーシャリングの使用

PostGIS ジオメトリの挿入と取得Gorm を使用するタイプは難しい場合があります。この問題に対処するために、ユーザーは Orb ライブラリを利用し、カスタムの Scan() メソッドと Value() メソッドを実装して、Go タイプと Gorm が期待する既知のバイナリ (WKB) 形式の間で変換することができます。以下に例を示します。

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 の自動スキャンおよび挿入機能がジオメトリ タイプでシームレスに動作します。

カスタム移行によるテーブル セットアップ

必要なジオメトリ列を含むテーブルを作成するには、カスタム移行手順を使用して列タイプを構成できます。

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()、および移行ステップが実装されたら、次のジオメトリ タイプを使用します。 Gorm モデルは簡単になります:

type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}
ログイン後にコピー

この設定により、Gorm は PostGIS ジオメトリ タイプを簡単に挿入および選択できるため、Go アプリケーションでジオメトリ データをシームレスに使用できるようになります。

以上がGorm を使用して PostGIS ジオメトリ タイプを挿入および選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!