go gin gorm连接postgres postgis输出geojson
go-gin-gorm
postgres-postgis
思路就是:采用原生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")
- }