[안드로이드] GPS로부터 자북 방향 얻기 전산질

안드로이드 GPS로 수신한 좌표로부터 자북(Magnetic North) 방향 얻기

  1. GPS로부터 수신한 위치정보(android.location.Location)의 방향(bearing)은 진북(True North)입니다.
  2. android.hardware.GeomagneticField 클래스를 사용하면 현재 위치의 편각(declination)을 구할 수 있습니다.
  3. GPS 위치정보의 방향(bearing)에서 편각(declination) 값을 빼 주면 자북 기준의 방향을 얻을 수 있습니다.


public static float getMagneticDirection( double latitude,
                                          double longitude,
                                          double altitudeMetre,
                                          float direction )
{
    GeomagneticField geomagnetic = new GeomagneticField(
        Double.valueOf( latitude ).floatValue(),
        Double.valueOf( longitude ).floatValue(),
        Double.valueOf( altitudeMetre ).floatValue(),
        System.currentTimeMillis() );

    return direction - geomagnetic.getDeclination();
}


안드로이드의 GeomagneticField 클래스는 API Level 3에서 추가되었으며, 미국의 NGA(National Geospatial-Intelligence Agency)에서 제공하는 World Magnetic Model을 사용합니다. 

현재 안드로이드 시스템에 적용되어 있는 World Magnetic Model은 WMM2010입니다. 이에 대한 자세한 정보는 http://www.ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml 에서 얻을 수 있습니다.

2014년 1월 15일 현재 최신 버전은 WMM2010이고 이는 2015년까지 유효합니다. 그리고 2015년 이후로도 몇년간은 쓸만한 신뢰도의 값을 계산해 줄 것입니다.

아마 앞으로 안드로이드의 새로운 버전이 나올 때 World Magnetic Model의 최신 버전이 탑재될 것이라고 합니다.

[Go lang] UDP send/receive sample program.

/* 송신 프로그램(send.go) */

package main

import (
        "flag"
        "fmt"
        "net"
        "os"
        "time"
)

var (
        data []string = []string{
                "Заправлены в планшеты космические карты,",
                "И штурман уточняет в последний раз маршрут.",
                "Давайте-ка, ребята, споёмте перед стартом,",
                "У нас ещё в запасе четырнадцать минут.",
                "\n",
                "Я верю, друзья, караваны ракет",
                "Помчат нас вперёд от звезды до звезды.",
                "На пыльных тропинках далёких планет",
                "Останутся наши следы.",
                "\n",
        }
)

func main() {
        flag.Parse()

        if flag.NArg() < 1 {
                fmt.Println("사용법: send [IP:port]")
                return
        }

        var destination string = flag.Arg(0)

        fmt.Println("목적지 = " + destination)

        address, err := net.ResolveUDPAddr("udp", destination)
        checkErr(err)

        conn, err := net.DialUDP("udp", nil, address)
        checkErr(err)

        defer conn.Close()

        for {
                // 배열의 문자열을 반복
                for _, elem := range data[:] {
                        sent, err := conn.Write([]byte(elem))
                        if checkErr(err) {
                                fmt.Printf("%d 바이트를 전송함.\n", sent)
                        }

                        time.Sleep(time.Second * 2)
                }
        }
}

func checkErr(err error) bool {
        if err != nil {
                fmt.Fprintf(os.Stderr, "오류: %s\n", err)
                return false
        }
        return true
}





/* 수신 프로그램(recv.go) */

package main

import (
        "flag"
        "fmt"
        "net"
        "os"
)

func main() {
        flag.Parse()

        if flag.NArg() < 1 {
                fmt.Println("사용법: recv [port]")
                return
        }

        var port string = ":" + flag.Arg(0)

        fmt.Println("수신 포트 = " + port)

        address, err := net.ResolveUDPAddr("udp", port)
        checkErr(err)

        conn, err := net.ListenUDP("udp", address)
        checkErr(err)

        defer conn.Close()

        var buff [512]byte
        for {
                sz, _, err := conn.ReadFromUDP(buff[0:])
                if checkErr(err) {
                        fmt.Println(string(buff[0:sz]))
                }
        }
}

func checkErr(err error) bool {
        if err != nil {
                fmt.Fprintf(os.Stderr, "오류: %s\n", err)
                return false
        }
        return true
}



// 새삼 느끼는거지만..  이글루스 편집기 정말 불편하구나...

kartograph.py - shp to svg 변환 모듈 전산질

https://github.com/kartograph/kartograph.py

ESRI SHP 파일을 SVG 이미지로 변환시켜주는 Python 스크립트.


1 2 3 4 5 6 7 8 9 10 다음


통계 위젯 (블랙)

01
9
53794

이 이글루를 링크한 사람 (블랙)

11