Advertisement
Guest User

Untitled

a guest
Jan 11th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. func handleError(w http.ResponseWriter, err error) {
  2. if err != nil {
  3. log.Print(err.Error() + "rn") // Logging
  4. http.Error(w, err.Error(), http.StatusInternalServerError)
  5. return
  6. }
  7. }
  8.  
  9. table := pq.QuoteIdentifier(table)
  10. identifier := pq.QuoteIdentifier("ID")
  11. rows, err := db.Query( fmt.Sprintf("SELECT %s, ST_AsText(geom) FROM %s WHERE %s = $1", identifier, table, identifier), feature)
  12. handleError(w, err)
  13.  
  14. package main
  15.  
  16. import (
  17. "fmt"
  18. "encoding/json"
  19. "os"
  20. "log"
  21. "net/http"
  22. "database/sql"
  23. "strings"
  24. "time"
  25. "github.com/lib/pq"
  26. )
  27.  
  28.  
  29. func handler(w http.ResponseWriter, r *http.Request) {
  30.  
  31. f, err := os.OpenFile("pgdump_errorlog.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
  32. log.Print("Couldn't open file")
  33. defer f.Close()
  34. log.SetOutput(f)
  35.  
  36. // Timing
  37. start := time.Now()
  38.  
  39. // Postgres Credentials
  40. const (
  41. DB_USER = "postgres"
  42. DB_PASSWORD = "OMITTED" // Removed details !
  43. DB_PORT = "OMITTED"
  44. DB_NAME = "OMITTED"
  45. )
  46.  
  47. // Postgres Connect
  48. dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s port=%s sslmode=disable",
  49. DB_USER, DB_PASSWORD, DB_NAME, DB_PORT)
  50. db, err := sql.Open("postgres", dbinfo)
  51. handleError(w, err)
  52. defer db.Close()
  53.  
  54. table := r.FormValue("table")
  55. feature := r.FormValue("id")
  56. if table != "" {
  57.  
  58. //Postgres Query
  59. var (
  60. id int
  61. geom string
  62. )
  63.  
  64. table := pq.QuoteIdentifier(table)
  65. identifier := pq.QuoteIdentifier("ID")
  66. rows, qerr := db.Query( fmt.Sprintf("SELECT %s, ST_AsText(geom) FROM %s WHERE %s = $1", identifier, table, identifier), feature)
  67. handleError(w, err)
  68. defer rows.Close()
  69. for rows.Next() {
  70. err := rows.Scan(&id, &geom)
  71. handleError(w, err)
  72. }
  73. err = rows.Err()
  74. handleError(w, err)
  75.  
  76. // Maniplate Strings
  77. returngeom := strings.Replace(geom, "1.#QNAN", "", -1)
  78. i := strings.Index(returngeom, "(")
  79. wkt := strings.TrimSpace(returngeom[:i])
  80. returngeom = returngeom[i:]
  81.  
  82. type WTKJSON struct {
  83. WTKType string
  84. Geometry string
  85. Elapsed time.Duration
  86. }
  87.  
  88. returnjson := WTKJSON{Geometry: returngeom, WTKType: wkt , Elapsed: time.Since(start)/1000000.0}
  89. json.NewEncoder(w).Encode(returnjson)
  90.  
  91. }
  92.  
  93. }
  94.  
  95. func handleError(w http.ResponseWriter, err error) {
  96. if err != nil {
  97. log.Print(err.Error() + "rn") // Logging
  98. http.Error(w, err.Error(), http.StatusInternalServerError)
  99. return
  100. }
  101. }
  102.  
  103.  
  104. func main() {
  105. http.HandleFunc("/", handler)
  106. http.ListenAndServe(":8080", nil)
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement