> 백엔드 개발 > Golang > Gorm을 사용하여 PostGIS 도형 유형을 어떻게 삽입하고 선택할 수 있나요?

Gorm을 사용하여 PostGIS 도형 유형을 어떻게 삽입하고 선택할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-05 10:50:02
원래의
370명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿