「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GORMでポストギスのジオメトリタイプを挿入して選択するにはどうすればよいですか?

GORMでポストギスのジオメトリタイプを挿入して選択するにはどうすればよいですか?

2025-03-23に投稿されました
ブラウズ:757

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

gorm

を使用して、ポストギスのジオメトリを挿入して選択します。この問題に対処するために、ユーザーはORBライブラリを活用して、GOMが予想されるGOタイプと有名なバイナリ(WKB)形式間を変換するためにカスタムスキャン()とvalue()メソッドを実装できます。例を次に示します func(g *ewkbgeompoint)スキャン(入力インターフェイス{})エラー{ gt、err:= ewkb.unmarshal(input。([] byte))) err!= nil { errを返します } g = gt。(*ewkbgeompoint) nilを返します } func(g ewkbgeompoint)value()(driver.value、error){ b:= geom.point(g) BP:=& b ewkbpt:= ewkb.point {point:bp.setsrid(4326)} ewkbpt.value()を返します }

これらのメソッドを構造体に実装することにより、Gormの自動化されたスキャンと挿入関数は、ジオメトリタイプでシームレスに動作する可能性があります。タイプ:

err = db.exec( `トラックが存在しない場合はテーブルの作成( IDシリアルプライマリキー、 Geom Geometry(Point、4326)nullではありません ); `).error err!= nil { errを返します } err = gormigrate.new(db、gormigrate.defaultoptions、[]*gormigrate.migration { { ID:「init」、 移行:func(tx *gorm.db)エラー{ tx.createTableを返します( テーブル...、 )。エラー }、 }、 { ID:「tracks_excect_geom」、 移行:func(tx *gorm.db)エラー{ db.automigrate(track {})を返します。エラー }、 }、 })。移行()
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.model geometrypoint ewkbgeompoint `gorm:" column:geom "` }

このセットアップを使用すると、GormはGO Applicationsで幾何学的データをシームレスに使用できるようになり、GO Applicationsでの幾何学データのシームレスな使用を可能にします。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3