是否可以从 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 块的偏移量。