mariaDB의 polygon 타입 이용하기 위해 전처리했던 내용을 정리해서 올렸었는데( 특정 좌표가 어느 위치에 포함되어 있는지 찾기(ST_CONTAINS) ) 그 때 사용했던 python 스크립트를 연습삼아 go lang 으로 포팅해보았습니다.
package main
import (
"database/sql"
"encoding/xml"
"fmt"
"io/ioutil"
"os"
_ "github.com/go-sql-driver/mysql"
)
type Terminal struct {
XMLName xml.Name `xml:"Terminal"`
Bounds []Bound `xml:"Bound"`
}
type Bound struct {
XMLName xml.Name `xml:"Bound"`
Id string `xml:"id,attr"`
Points []Point `xml:"Point"`
}
type Point struct {
XMLName xml.Name `xml:"Point"`
X string `xml:"x,attr"`
Y string `xml:"y,attr"`
}
func main() {
fp, err := os.Open("D:/Geofence_UTF_HSEDIT.xml")
checkError(err)
defer fp.Close()
data, err := ioutil.ReadAll(fp)
var terminal Terminal
xmlerr := xml.Unmarshal(data, &terminal)
checkError(xmlerr)
db, err := sql.Open("mysql", "dbId:dbPwd@tcp(dbIp:dbPort)/dbName")
checkError(err)
defer db.Close()
//fmt.Println(terminal)
for i := 0; i < len(terminal.Bounds); i++ {
points := terminal.Bounds[i].Points
if len(points) > 0 {
polTxt := ""
for j := 0; j < len(points); j++ {
polTxt += points[j].Y + " " + points[j].X + ", "
}
/*
for _, point := range terminal.Bounds[i].Points {
fmt.Printf(" - Point : %s - %s\n", point.X, point.Y)
}
*/
polTxt += points[0].Y + " " + points[0].X
polTxt = "POLYGON((" + polTxt + "))"
//fmt.Println(polTxt)
boundId := terminal.Bounds[i].Id
fmt.Println("Bound ID : " + boundId)
_, err := db.Exec("INSERT INTO evt_bound (bnd_id, bnd_pol) VALUES (?, POLYGONFROMTEXT(?))", boundId, polTxt)
checkError(err)
}
}
func checkError(err error) {
if err != nil {
panic(err)
}
}
go 에서 xml, database 사용하는 기본적인 방법을 응용해보았습니다.
'Slack 채널 정리' 카테고리의 다른 글
js 객체 리터럴에서 객체 자신의 값을 참조하는 방법 (0) | 2019.12.06 |
---|---|
[java]random password 생성 (0) | 2019.12.06 |
json validation - readTree (0) | 2019.12.03 |
제목 붙이기 애매한 shell script (0) | 2019.12.03 |
node.js child_process 한글 출력 문제 (0) | 2019.12.03 |