sql.Register("sqlite3_with_extensions",
&sqlite3.SQLiteDriver{
Extensions: []string{
"mod_spatialite",
},
})
db, err := sql.Open("sqlite3_with_extensions", "./map.gpkg")
if err != nil {
panic(err.Error())
}
query := "select AsText(geom) from level0"
rows, err := db.Query(query)
if err != nil {
panic(err.Error())
}
for rows.Next() {
var s []byte
rows.Scan(&s)
fmt.Print(s)
}
首先,我寫的代碼如上,我想接收 geom 資料作為文本,如 multipolygon((((……))) ,但只回傳一個空陣列。
下面是資料庫的樣子,資料以多多邊形型別存盤

將此資料加載到 golang 中會回傳如下圖所示的資料
我想要像 multipolygon ((((......))) 這樣的文本,而不是像上面那樣的資料型別,但我不知道該怎么做,
我已將擴展的 spatialite 加載到 sqlite3 并通過 astext 加載資料,但回傳一個空陣列為 [], [], [] 。如何回傳我想要的多面體文本?任何幫助,將不勝感激
uj5u.com熱心網友回復:
試試這個:
package main
import (
"database/sql"
"log"
"github.com/twpayne/go-geom/encoding/wkb"
"github.com/twpayne/go-geom/encoding/wkt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./gadm36_levels.gpkg")
if err != nil {
log.Fatal(err)
}
rows, err := db.Query("select geom from level0 limit 1")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var b []byte
var mp wkb.MultiPolygon
if err := rows.Scan(&b); err != nil {
log.Fatal(err)
}
if err := mp.Scan(b[40:]); err != nil {
log.Fatal(err)
}
log.Printf("% v", *mp.MultiPolygon)
text, err := wkt.Marshal(mp.MultiPolygon)
if err != nil {
log.Fatal(err)
}
log.Printf("%v\n", text)
}
}
40 是 WKB 塊的偏移量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422118.html
標籤:
上一篇:將標簽應用于每個結構中的每個欄位
