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 중국어 웹사이트의 기타 관련 기사를 참조하세요!