Gorm과 함께 ENCODING 함수를 사용하여 PostGIS 기하학을 삽입하고 선택하려면 어떻게 해야 합니까?

DDD
풀어 주다: 2024-11-07 05:20:03
원래의
765명이 탐색했습니다.

How can I use ENCODING Functions with Gorm to Insert and Select PostGIS Geometry?

ENCODING 함수를 사용하여 Gorm으로 PostGIS 기하학 삽입 및 선택

Golang 및 Gorm을 사용하여 기하학적 유형 검색 및 삽입 시 orb 및 geojson 활용 라이브러리의 인코딩 기능은 수동 쿼리 작성이 필요 없는 솔루션을 제공합니다.

인코딩 함수를 사용하여 쿼리

orb로 도형 열을 쿼리하려면 ST_AsBinary에 필드를 래핑하기만 하면 됩니다. 함수:

rows, err := db.Query("SELECT id, name, ST_AsBinary(geom) FROM orbtest LIMIT 1")
로그인 후 복사

마찬가지로 orb를 사용하여 도형 열에 삽입하려면 ST_GeomFromWKB 함수에 orb 도형 값을 래핑합니다.

db.Exec("INSERT INTO orbtest (id, name, geom) VALUES (, , ST_GeomFromWKB())", 1, "Test", wkb.Value(p))
로그인 후 복사

인코딩 함수를 사용하여 스캔 및 저장

Go 구조체에 대해 사용자 지정 스캔 및 값 메서드를 구현하여 특정 형식으로 저장된 도형 데이터를 처리할 수 있습니다.

예를 들어 geojson의 인코딩 라이브러리를 사용하는 경우는 다음과 같습니다.

<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>
로그인 후 복사

Gorm 모델에 통합

그러면 구조체를 Gorm 모델로 사용할 수 있으며, 사용자 정의 스캔 및 값 방법을 사용하도록 기하학 필드의 gorm 태그를 지정합니다.

<code class="go">type Track struct {
    gorm.Model

    GeometryPoint EWKBGeomPoint `gorm:"column:geom"`
}</code>
로그인 후 복사

데이터베이스 테이블 설정

기하학 열이 적절한 형식으로 저장되도록 하려면 테이블 생성을 사용자 정의하세요.

<code class="go">err = db.AutoMigrate(Track{}).Error</code>
로그인 후 복사

이 접근 방식은 기하학 데이터 변환을 통해 Gorm 및 지정된 인코딩 기능을 사용하여 원활한 삽입 및 검색이 가능합니다.

위 내용은 Gorm과 함께 ENCODING 함수를 사용하여 PostGIS 기하학을 삽입하고 선택하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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