是否可以从 spatialite 中获取字符串形式的多多边形类型数据?
Is it possible to get multipolygon type data as string from spatialite?
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)
}
首先,我写的代码如上,我想接收几何数据作为文本,如 multipolygon((((......))) ,但只有一个空数组 returned.
下面是数据库的样子,数据以多边形类型存储
将此数据加载到golang returns数据如下图
我想要像 multipolygon ((((......))) 这样的文本,而不是像上面那样的数据类型,但我不知道该怎么做,
我已经将扩展的 spatialite 加载到 sqlite3 中并通过 astext 加载数据,但是一个空数组被 returned 为 [], [], [] 。我怎样才能 return 我想要的多边形文本?任何帮助将不胜感激
试试这个:
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 块的偏移量。
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)
}
首先,我写的代码如上,我想接收几何数据作为文本,如 multipolygon((((......))) ,但只有一个空数组 returned.
下面是数据库的样子,数据以多边形类型存储
将此数据加载到golang returns数据如下图
我想要像 multipolygon ((((......))) 这样的文本,而不是像上面那样的数据类型,但我不知道该怎么做,
我已经将扩展的 spatialite 加载到 sqlite3 中并通过 astext 加载数据,但是一个空数组被 returned 为 [], [], [] 。我怎样才能 return 我想要的多边形文本?任何帮助将不胜感激
试试这个:
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 块的偏移量。