문제:
Go에서 Gorm을 사용하여 PostGIS 기하학을 삽입하고 검색합니다. Orb 라이브러리를 통한 유형은 Gorm의 자동 삽입 및 데이터 검색으로 인해 문제가 발생합니다. 단순히 이진 데이터를 도형 열에 삽입하는 것만으로는 충분하지 않으며 쿼리하면 16진수 결과가 반환됩니다.
해결책:
@robbieperry22 답변을 영감으로 사용하여 다른 인코딩 라이브러리를 사용하면 바이트 조작이 필요하지 않습니다.
<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>
<code class="go">type Track struct { gorm.Model GeometryPoint EWKBGeomPoint `gorm:"column:geom"` }</code>
<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>
이 접근 방식은 EWKB 바이트와 PostGIS 도형 유형 간에 원활하게 변환하므로 추가 사용자 정의나 수동 쿼리 생성 없이 도형 삽입 및 선택이 가능합니다.
위 내용은 Gorm 및 EWKB를 사용하여 PostGIS 기하학 유형을 삽입하고 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!