package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gorilla/mux"
|
|
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
type Routes []Route
|
|
|
|
var routes = Routes{
|
|
Route{
|
|
"Index",
|
|
"GET",
|
|
"/",
|
|
Index,
|
|
},
|
|
Route{
|
|
"GetAllCells",
|
|
"Get",
|
|
"/allcells",
|
|
GetAllCells,
|
|
},
|
|
Route{
|
|
"GetCellsInQuad",
|
|
"Get",
|
|
"/cells/{lat1}/{lon1}/{lat2}/{lon2}",
|
|
GetCellsInQuad,
|
|
},
|
|
}
|
|
|
|
//ROUTES
|
|
|
|
func Index(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Fprintln(w, "ask for cells in /r")
|
|
//http.FileServer(http.Dir("./web"))
|
|
}
|
|
func GetAllCells(w http.ResponseWriter, r *http.Request) {
|
|
ipFilter(w, r)
|
|
|
|
cells := []CellModel{}
|
|
iter := cellCollection.Find(bson.M{}).Limit(10000).Iter()
|
|
err := iter.All(&cells)
|
|
|
|
//convert []cells struct to json
|
|
jsonCells, err := json.Marshal(cells)
|
|
check(err)
|
|
|
|
fmt.Fprintln(w, string(jsonCells))
|
|
}
|
|
func GetCellsInQuad(w http.ResponseWriter, r *http.Request) {
|
|
ipFilter(w, r)
|
|
|
|
vars := mux.Vars(r)
|
|
lat1, err := strconv.ParseFloat(vars["lat1"], 64)
|
|
check(err)
|
|
lon1, err := strconv.ParseFloat(vars["lon1"], 64)
|
|
check(err)
|
|
lat2, err := strconv.ParseFloat(vars["lat2"], 64)
|
|
check(err)
|
|
lon2, err := strconv.ParseFloat(vars["lon2"], 64)
|
|
check(err)
|
|
fmt.Println(vars)
|
|
|
|
cells := []CellModel{}
|
|
iter := cellCollection.Find(bson.M{"lat": bson.M{"$gte": lat2, "$lt": lat1}, "lon": bson.M{"$gte": lon1, "$lt": lon2}}).Limit(100).Iter()
|
|
err = iter.All(&cells)
|
|
|
|
//convert []cells struct to json
|
|
jsonCells, err := json.Marshal(cells)
|
|
check(err)
|
|
|
|
fmt.Fprintln(w, string(jsonCells))
|
|
}
|