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)
	}
}

未分類

Posted by ebata