go gin gorm连接postgres postgis输出geojson
1. 技术环境
go-gin-gorm
postgres-postgis
2. 简单实现代码
思路就是:采用原生sql实现查询、更新等,采用gorm的raw来执行sql语句
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
// 前提是在postgres中安装好postgis插件
func main() {
dsn := "host=localhost user=postgres password=5241 dbname=test port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, _ := gorm.Open(postgres.New(postgres.Config{
DSN: dsn,
PreferSimpleProtocol: true,
}), &gorm.Config{})
r := gin.Default()
r.GET("/data/:table_name", func(c *gin.Context) {
table_name := c.Param("table_name")
// 从postgis中利用 ST 函数 获得的结果,以string返回,然后前端进行解析即可
var result string
if db.Migrator().HasTable(table_name) {
sqls := fmt.Sprintf("select json_build_object('type', 'FeatureCollection', 'name', '%s', 'features', json_agg(ST_ASGeoJSON(t.*)::json)) from %s AS t", table_name, table_name)
db.Raw(sqls).Scan(&result)
}
fmt.Printf("%q", result)
c.JSON(http.StatusOK, gin.H{
"message": "ok",
"data": result,
})
})
r.Run(":8080")
}
3. 结果图片