Commit bd046fc0 by dliangx

change connectdb() to db

parent 1cbfa985
package db
import (
"database/sql"
_ "github.com/lib/pq"
)
var DB *sql.DB
const connStr = "postgres://liang:postgres@localhost/xpolt?sslmode=disable"
func init() {
db, err := sql.Open("postgres", connStr)
if err != nil {
panic("failed to connect database")
}
DB = db
}
...@@ -9,20 +9,14 @@ import ( ...@@ -9,20 +9,14 @@ import (
"strings" "strings"
"time" "time"
"com.dliangx.xplot/appserver/db"
"com.dliangx.xplot/appserver/model" "com.dliangx.xplot/appserver/model"
"com.dliangx.xplot/appserver/util" "com.dliangx.xplot/appserver/util"
) )
func SaveRoute(line model.GeoJson) (model.OptRoute, error) { func SaveRoute(line model.GeoJson) (model.OptRoute, error) {
// 连接数据库
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 开启事务 // 开启事务
tx, err := db.Begin() tx, err := db.DB.Begin()
if err != nil { if err != nil {
return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err) return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err)
} }
...@@ -66,13 +60,8 @@ func SaveRoute(line model.GeoJson) (model.OptRoute, error) { ...@@ -66,13 +60,8 @@ func SaveRoute(line model.GeoJson) (model.OptRoute, error) {
} }
func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) { func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin() tx, err := db.DB.Begin()
if err != nil { if err != nil {
return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err) return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err)
} }
...@@ -112,13 +101,8 @@ func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) { ...@@ -112,13 +101,8 @@ func SaveOptArea(optArea model.GeoJson) (model.OptArea, error) {
} }
func UpdateRoute(line model.GeoJson) (model.OptRoute, error) { func UpdateRoute(line model.GeoJson) (model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin() tx, err := db.DB.Begin()
if err != nil { if err != nil {
return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err) return model.OptRoute{}, fmt.Errorf("begin transaction failed: %w", err)
} }
...@@ -162,13 +146,8 @@ func UpdateRoute(line model.GeoJson) (model.OptRoute, error) { ...@@ -162,13 +146,8 @@ func UpdateRoute(line model.GeoJson) (model.OptRoute, error) {
} }
func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) { func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
tx, err := db.Begin() tx, err := db.DB.Begin()
if err != nil { if err != nil {
return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err) return model.OptArea{}, fmt.Errorf("begin transaction failed: %w", err)
} }
...@@ -209,11 +188,6 @@ func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) { ...@@ -209,11 +188,6 @@ func UpdateOptArea(optArea model.GeoJson) (model.OptArea, error) {
} }
func GetRoute(id int, opt_type int) (model.OptRoute, error) { func GetRoute(id int, opt_type int) (model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var route model.OptRoute var route model.OptRoute
var query string var query string
...@@ -228,7 +202,7 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) { ...@@ -228,7 +202,7 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) {
FROM opt_fly_routes WHERE id = $1` FROM opt_fly_routes WHERE id = $1`
} }
err = db.QueryRow(query, id).Scan( err := db.DB.QueryRow(query, id).Scan(
&route.ID, &route.Type, &jsonb_data, &route.OptTime, &route.Geometry, &route.ID, &route.Type, &jsonb_data, &route.OptTime, &route.Geometry,
) )
if err != nil { if err != nil {
...@@ -244,15 +218,10 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) { ...@@ -244,15 +218,10 @@ func GetRoute(id int, opt_type int) (model.OptRoute, error) {
} }
func GetOptArea(id int, opt_type int) (model.OptArea, error) { func GetOptArea(id int, opt_type int) (model.OptArea, error) {
db, err := connectDB()
if err != nil {
return model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var area model.OptArea var area model.OptArea
var jsonb_data []byte var jsonb_data []byte
err = db.QueryRow(` err := db.DB.QueryRow(`
SELECT id, type, JSON(properties), opt_time, ST_AsGeoJSON(geometry) as geometry SELECT id, type, JSON(properties), opt_time, ST_AsGeoJSON(geometry) as geometry
FROM opt_areas WHERE id = $1 FROM opt_areas WHERE id = $1
`, id).Scan( `, id).Scan(
...@@ -271,17 +240,12 @@ func GetOptArea(id int, opt_type int) (model.OptArea, error) { ...@@ -271,17 +240,12 @@ func GetOptArea(id int, opt_type int) (model.OptArea, error) {
} }
func DeleteRoute(id int, opt_type int) (bool, error) { func DeleteRoute(id int, opt_type int) (bool, error) {
db, err := connectDB() var err error
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var result sql.Result var result sql.Result
if opt_type == 1 { if opt_type == 1 {
result, err = db.Exec(`DELETE FROM opt_routes WHERE id = $1`, id) result, err = db.DB.Exec(`DELETE FROM opt_routes WHERE id = $1`, id)
} else if opt_type == 2 { } else if opt_type == 2 {
result, err = db.Exec(`DELETE FROM opt_fly_routes WHERE id = $1`, id) result, err = db.DB.Exec(`DELETE FROM opt_fly_routes WHERE id = $1`, id)
} }
if err != nil { if err != nil {
...@@ -297,14 +261,9 @@ func DeleteRoute(id int, opt_type int) (bool, error) { ...@@ -297,14 +261,9 @@ func DeleteRoute(id int, opt_type int) (bool, error) {
} }
func DeleteOptArea(id int, opt_type int) (bool, error) { func DeleteOptArea(id int, opt_type int) (bool, error) {
db, err := connectDB() var err error
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
var result sql.Result var result sql.Result
result, err = db.Exec(`DELETE FROM opt_areas WHERE id = $1`, id) result, err = db.DB.Exec(`DELETE FROM opt_areas WHERE id = $1`, id)
if err != nil { if err != nil {
return false, fmt.Errorf("delete route failed: %w", err) return false, fmt.Errorf("delete route failed: %w", err)
...@@ -319,11 +278,6 @@ func DeleteOptArea(id int, opt_type int) (bool, error) { ...@@ -319,11 +278,6 @@ func DeleteOptArea(id int, opt_type int) (bool, error) {
} }
func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) { func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
db, err := connectDB()
if err != nil {
return []model.OptRoute{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry) jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr)) wkt, err := util.TransGeoToWKT(string(jsonstr))
...@@ -340,7 +294,7 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) { ...@@ -340,7 +294,7 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
query = `SELECT id, type, properties, opt_time, ST_AsGeoJSON(geometry) as geometry FROM opt_fly_routes WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)` query = `SELECT id, type, properties, opt_time, ST_AsGeoJSON(geometry) as geometry FROM opt_fly_routes WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)`
} }
rows, err := db.Query(query, wkt) rows, err := db.DB.Query(query, wkt)
if err != nil { if err != nil {
return []model.OptRoute{}, err return []model.OptRoute{}, err
} }
...@@ -367,11 +321,6 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) { ...@@ -367,11 +321,6 @@ func GetRelatedRoute(obj model.GeoJson) ([]model.OptRoute, error) {
} }
func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) { func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
db, err := connectDB()
if err != nil {
return []model.OptArea{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry) jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr)) wkt, err := util.TransGeoToWKT(string(jsonstr))
...@@ -386,7 +335,7 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) { ...@@ -386,7 +335,7 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
query = `SELECT id, type, properties, opt_time as geometry FROM opt_areas WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)` query = `SELECT id, type, properties, opt_time as geometry FROM opt_areas WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geometry)`
} }
rows, err := db.Query(query, wkt) rows, err := db.DB.Query(query, wkt)
if err != nil { if err != nil {
return []model.OptArea{}, err return []model.OptArea{}, err
} }
...@@ -412,11 +361,6 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) { ...@@ -412,11 +361,6 @@ func GetRelatedOptArea(obj model.GeoJson) ([]model.OptArea, error) {
} }
func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) { func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
db, err := connectDB()
if err != nil {
return []model.GeoJson{}, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry) jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr)) wkt, err := util.TransGeoToWKT(string(jsonstr))
...@@ -431,7 +375,7 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) { ...@@ -431,7 +375,7 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
query = `SELECT id, type, properties as geometry FROM geojson_data WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geom)` query = `SELECT id, type, properties as geometry FROM geojson_data WHERE ST_Intersects(ST_SetSRID($1::geometry,4326), geom)`
} }
rows, err := db.Query(query, wkt) rows, err := db.DB.Query(query, wkt)
if err != nil { if err != nil {
return []model.GeoJson{}, err return []model.GeoJson{}, err
} }
...@@ -457,15 +401,11 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) { ...@@ -457,15 +401,11 @@ func GetRelatedAdmArea(obj model.GeoJson) ([]model.GeoJson, error) {
} }
func CalcAreasCenter(ids []string, opt int) (float64, float64, error) { func CalcAreasCenter(ids []string, opt int) (float64, float64, error) {
db, err := connectDB()
if err != nil {
return 0, 0, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// Convert string slice to comma separated string for SQL IN clause // Convert string slice to comma separated string for SQL IN clause
idList := strings.Join(ids, ",") idList := strings.Join(ids, ",")
var err error
var wktPoint string var wktPoint string
var query string var query string
...@@ -489,7 +429,7 @@ func CalcAreasCenter(ids []string, opt int) (float64, float64, error) { ...@@ -489,7 +429,7 @@ func CalcAreasCenter(ids []string, opt int) (float64, float64, error) {
return 0, 0, errors.New("opt value is not allow! ") return 0, 0, errors.New("opt value is not allow! ")
} }
err = db.QueryRow(query).Scan(&wktPoint) err = db.DB.QueryRow(query).Scan(&wktPoint)
if wktPoint == "" { if wktPoint == "" {
return 0, 0, fmt.Errorf("no areas found") return 0, 0, fmt.Errorf("no areas found")
} }
...@@ -523,12 +463,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) { ...@@ -523,12 +463,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
return false, fmt.Errorf("invalid geometry: geometry cannot be nil") return false, fmt.Errorf("invalid geometry: geometry cannot be nil")
} }
db, err := connectDB()
if err != nil {
return false, fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 将两个 GeoJSON 转换为 WKT // 将两个 GeoJSON 转换为 WKT
geom1, err := json.Marshal(obj1.Geometry) geom1, err := json.Marshal(obj1.Geometry)
if err != nil { if err != nil {
...@@ -541,7 +475,7 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) { ...@@ -541,7 +475,7 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
} }
var intersects bool var intersects bool
err = db.QueryRow(` err = db.DB.QueryRow(`
SELECT ST_Intersects( SELECT ST_Intersects(
ST_GeomFromGeoJSON($1), ST_GeomFromGeoJSON($1),
ST_GeomFromGeoJSON($2) ST_GeomFromGeoJSON($2)
...@@ -557,12 +491,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) { ...@@ -557,12 +491,6 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
func Get90CrossOptArea(obj model.Geometrys) (string, error) { func Get90CrossOptArea(obj model.Geometrys) (string, error) {
db, err := connectDB()
if err != nil {
return "", fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
jsonstr, _ := json.Marshal(obj.Geometry) jsonstr, _ := json.Marshal(obj.Geometry)
wkt, err := util.TransGeoToWKT(string(jsonstr)) wkt, err := util.TransGeoToWKT(string(jsonstr))
if err != nil { if err != nil {
...@@ -574,7 +502,7 @@ func Get90CrossOptArea(obj model.Geometrys) (string, error) { ...@@ -574,7 +502,7 @@ func Get90CrossOptArea(obj model.Geometrys) (string, error) {
SELECT p.id from opt_areas p WHERE st_area(ST_Intersection(ST_GeomFromText($1, 4326), p.geometry))/st_area(p.geometry) > 0.9; SELECT p.id from opt_areas p WHERE st_area(ST_Intersection(ST_GeomFromText($1, 4326), p.geometry))/st_area(p.geometry) > 0.9;
` `
rows, err := db.Query(query, wkt) rows, err := db.DB.Query(query, wkt)
if err != nil { if err != nil {
return "", err return "", err
} }
......
...@@ -8,10 +8,10 @@ import ( ...@@ -8,10 +8,10 @@ import (
"log" "log"
"os" "os"
"com.dliangx.xplot/appserver/db"
"github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/app"
"github.com/cloudwego/hertz/pkg/common/utils" "github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts" "github.com/cloudwego/hertz/pkg/protocol/consts"
_ "github.com/lib/pq"
) )
// Feature GeoJSON特征结构体 // Feature GeoJSON特征结构体
...@@ -24,31 +24,20 @@ type Feature struct { ...@@ -24,31 +24,20 @@ type Feature struct {
// ProcessGeoJSONFile 处理GeoJSON文件的主函数 // ProcessGeoJSONFile 处理GeoJSON文件的主函数
func ProcessGeoJSONFile(filename string) error { func ProcessGeoJSONFile(filename string) error {
// 连接数据库
db, err := connectDB()
if err != nil {
return fmt.Errorf("database connection failed: %v", err)
}
defer db.Close()
// 创建表 // 创建表
if err := createTable(db); err != nil { if err := createTable(db.DB); err != nil {
return fmt.Errorf("table creation failed: %v", err) return fmt.Errorf("table creation failed: %v", err)
} }
// 处理文件 // 处理文件
if err := processFile(filename, db); err != nil { if err := processFile(filename, db.DB); err != nil {
return fmt.Errorf("file processing failed: %v", err) return fmt.Errorf("file processing failed: %v", err)
} }
return nil return nil
} }
func connectDB() (*sql.DB, error) {
connStr := "postgres://postgres:postgres@localhost/xpolt?sslmode=disable"
return sql.Open("postgres", connStr)
}
func createTable(db *sql.DB) error { func createTable(db *sql.DB) error {
// _, err := db.Exec(` // _, err := db.Exec(`
// CREATE TABLE IF NOT EXISTS geojson_data ( // CREATE TABLE IF NOT EXISTS geojson_data (
......
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
"github.com/cloudwego/hertz/pkg/common/utils" "github.com/cloudwego/hertz/pkg/common/utils"
"github.com/cloudwego/hertz/pkg/protocol/consts" "github.com/cloudwego/hertz/pkg/protocol/consts"
"com.dliangx.xplot/appserver/db"
"com.dliangx.xplot/appserver/geo" "com.dliangx.xplot/appserver/geo"
"com.dliangx.xplot/appserver/route" "com.dliangx.xplot/appserver/route"
) )
...@@ -18,7 +19,7 @@ func main() { ...@@ -18,7 +19,7 @@ func main() {
h := server.Default( h := server.Default(
server.WithHostPorts(":8686"), server.WithHostPorts(":8686"),
) )
defer db.DB.Close()
h.GET("/ping", func(ctx context.Context, c *app.RequestContext) { h.GET("/ping", func(ctx context.Context, c *app.RequestContext) {
c.JSON(consts.StatusOK, utils.H{"message": "pong"}) c.JSON(consts.StatusOK, utils.H{"message": "pong"})
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment