banner
biuaxia

biuaxia

"万物皆有裂痕,那是光进来的地方。"
github
bilibili
tg_channel

Golangによる緯度経度のDMS形式の入力と10進数形式の印刷機能の実装

title: Golang の実装による緯度経度の DMS 形式の入力と 10 進数形式の出力機能
date: 2022-05-30 10:53:00
toc: false
index_img: https://puep.qpic.cn/coral/Q3auHgzwzM4fgQ41VTF2rPjKPe2MMQJnppZjNiaj9zdRZoYNibBRo1Xw/0
category:

  • Go
    tags:
  • フォーマット
  • 出力

タイトル#

下の表にある各位置に対応する location 構造体を宣言し、これらの位置を 10 進数形式で出力してください。

#

探査機または着陸機着陸地点緯度経度
スピリット号コロンビア記念館南緯 14°34'6.2"東経 175°28'21.5"
オポチュニティ号チャレンジャー記念館南緯 1°56'46.3"東経 354°28'24.2"
キュリオシティ号ブラッドバリ着陸地南緯 4°35'22.2"東経 137°26'30.1"
インサイト号エリシウム平原北緯 4°30'0.0"東経 135°54'0"

コード#

package main

import (
	"fmt"
	"strings"
)

type location struct {
	lat, long float64
}

func newLocation(lat, long coordinate) location {
	return location{
		lat:  lat.decimal(),
		long: long.decimal(),
	}
}

type coordinate struct {
	d, m, s float64
	h       rune
}

func (c coordinate) decimal() float64 {
	sign := 1.0
	switch strings.ToLower(string(c.h)) {
	case "s", "w":
		sign = -1
	}
	return sign * (c.d + c.m/60 + c.s/3600)
}

func main() {
	// 南緯14°34'6.2",東経175°28'21.5"
	spirit := newLocation(coordinate{d: 14, m: 34, s: 6.2, h: 'S'}, coordinate{d: 175, m: 28, s: 21.5, h: 'E'})
	// 南緯1°56'46.3",東経354°28'24.2"
	opportunity := newLocation(coordinate{d: 1, m: 56, s: 46.3, h: 'S'}, coordinate{d: 354, m: 28, s: 24.2, h: 'E'})
	// 南緯4°35'22.2",東経137°26'30.1"
	curiosity := newLocation(coordinate{d: 4, m: 35, s: 22.2, h: 'S'}, coordinate{d: 137, m: 26, s: 30.1, h: 'E'})
	// 北緯4°30'0.0",東経135°54'0"
	insight := newLocation(coordinate{d: 4, m: 30, s: 0.0, h: 'N'}, coordinate{d: 135, m: 54, s: 0, h: 'E'})

	fmt.Printf("spirit: %+v\n", spirit)
	fmt.Printf("opportunity: %+v\n", opportunity)
	fmt.Printf("curiosity: %+v\n", curiosity)
	fmt.Printf("insight: %+v\n", insight)
}

結果#

spirit: {lat:-14.568388888888888 long:175.4726388888889}
opportunity: {lat:-1.9461944444444446 long:354.47338888888885}
curiosity: {lat:-4.5895 long:137.44169444444444}
insight: {lat:4.5 long:135.9}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。