Golang テストコード (1)適当な座標情報を入力して、近くのOpenStreetMapのnodeに強制的に寄せて、ダイクストラ計算を強行する方法 (ここでは300メートル以内で、もっとも近いノードを見つける、という処理をやっている)
// go get github.com/lib/pq を忘れずに
// go run main5.go
/*
(1)適当な座標情報を入力して、近くのOpenStreetMapのnodeに強制的に寄せて、ダイクストラ計算を強行する方法
(ここでは300メートル以内で、もっとも近いノードを見つける、という処理をやっている)
*/
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/lib/pq"
)
func main() {
db, err := sql.Open("postgres",
"user=postgres password=password host=localhost port=15432 dbname=utsu_db sslmode=disable")
if err != nil {
log.Fatal("OpenError: ", err)
}
defer db.Close()
rows, err := db.Query("SELECT source,
x1 as longitude, y1 as latitude, ST_Distance('SRID=4326;POINT(139.9182893339256 36.573831584767085)'::GEOGRAPHY, the_geom) as dist FROM ways WHERE ST_DWithin(the_geom, ST_GeographyFromText('SRID=4326;POINT(139.9182893339256 36.573831584767085)'), 300.0) ORDER BY dist")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var source int
var longitude float64
var latitude float64
var dist float64
if err := rows.Scan(&source, &longitude, &latitude, &dist); err != nil {
fmt.Println(err)
}
fmt.Println(source, longitude, latitude, dist)
}
if err := db.Ping(); err != nil { //データベースが繋っているかの確認(らしい)
log.Fatal("PingError: ", err)
}
}