#目的
ランダムに緯度・経度情報を作成したい。
##緯度・経度の定義について
(株式会社パスコHPより引用:https://www.pasco.co.jp/recommend/word/word026/)
緯度
緯度とは、赤道を0°とし、南北へそれぞれ90°まで表します。北緯90°,南緯90°はそれぞれ北極,南極です。この角度は、その点に接する線と北極と南極を結ぶ地軸(青い線)との成す角を表します。
経度
経度とは、旧グリニッジ天文台跡(ロンドン)を通る南北の線(茶色の線)を0°とし、東西へそれぞれ180°まで表します。東経180°と西経180°は同じ場所を示します。 (南北に通る線を子午線といい、旧グリニッジ天文台跡を通る基準となる子午線を本初子午線といいます。) この角度は、その点を通る子午線と本初子午線との角度を表します。
##取りうる値
上記定義の通りで
緯度:-90~90
経度:-180~180
それに加えて、小数点以下の度・分・秒データを
0~999999と定義した
(※本来は)
分,秒は時間と同じように60進法になっています。
ただし、秒に小数点以下の数値をつける場合は秒の後ろに10進法で表します。
が正しいようなので、修正予定。
##PowerShellで実装する
緯度と経度は取りうる値が異なるだけで同じロジックとなるのだが、
意味を持つ単位で関数分けする目的で、緯度生成関数と経度生成関数に分けた。
※一括りにしても別に可能だったが、関数の目的はシンプルであるように意図。
#緯度のランダム生成処理
$latitude = createLatitude
#経度のランダム生成処理
$longitude = createLongitude
#緯度情報を自動生成する関数
function createLatitude {
$latitudeint=Get-Random -Maximum 90 -Minimum 0
$minussign_lat = ''
$signseed_lat=Get-Random
#緯度・経度の符号を決定する
minusSignDecide $signseed_lat $minussign_lat
$latradix = Get-Random -Maximum 999999 -Minimum 0
#緯度の値を文字列連結で実現する
$latitude = $minussign_lat + [string]$latitudeint + '.' + [string]$latradix
Write-Output($latitude)
}
#経度を自動生成する関数
function createLongitude{
$longitudeint=Get-Random -Maximum 180 -Minimum 0
$minussign_lon = ''
$signseed_lon=Get-Random
#緯度・経度の符号を決定する
minusSignDecide $signseed_lon $minussign_lon
$lonradix = Get-Random -Maximum 999999 -Minimum 0
#緯度の値を文字列連結で実現する
$longitude = $minussign_lon + [string]$longitudeint + '.' + [string]$lonradix
Write-Output($longitude)
}
PowerShellのGet-Randomコマンドレットが大変便利。
以下のオプションをつけるところがポイントになる。
- -Maximumに最大値を指定
- -Minimumに最小値を指定
これによって、一行で緯度・経度の整数値部分が作れる。
Get-Randomコマンドレットのヘルプ
整数部につく符号もランダムにしたかったので、
以下の関数でランダムに決定するようにした。
#緯度・経度に付随する符号をランダムに決定する関数
function minusSignDecide($signseed,$signstr){
$signseed_calced = $signseed % 2
if($signseed_calced -eq 1){
$signstr = '-'
} else{
$signstr = ''
}
#戻り値を返す
Write-Output($signstr)
}
##実行結果
ランダムに生成した緯度・経度を表示すると以下のようになる。
latitude = 30.608347
longitude = 7.299758
##Google Mapで表示させると
以上。