シェルスクリプトマガジン

特別企画 GPSモジュールで遊ぼう(Vol.61掲載)

著者:麻生 二郎

「NEO-6M」というGPS(地理情報システム)モジュールを搭載したアンテナ付き基板が数百円に 購入できます。この基板にUART-USB変換ケーブルを接続するだけで、パソコンから位置の情報を取得できます。最新のLinuxディストリビューションとシェルスクリプトで遊んでみましょう。

シェルスクリプトマガジン Vol.61は以下のリンク先でご購入できます。

図13 GPSモジュールを利用するシェルスクリプト(gps_data.sh)

#!/bin/sh

## Yahoo! JAPANのアプリケーションID
yahoo_appid="アプリケーションID"

## 地図の大きさ、縮尺
width="640"
height="480"
scale="17"

## GPSのデータ取得
timeout 3 cat /dev/ttyUSB0 > /tmp/gps.log

##緯度計算
latitude_raw=$(cat /tmp/gps.log | grep GPGLL | head -1 | cut -f 2 -d ",")
latitude_ns=$(cat /tmp/gps.log | grep GPGLL | head -1 | cut -f 3 -d ",")
ns=1;test "${latitude_ns}" = "S" && ns=-1
latitude_do=$(echo "scale=0;${latitude_raw} / 100" | bc)
latitude=$(echo "scale=5;${ns} * ((${latitude_raw} - ${latitude_do} * 100) / 60 + ${latitude_do})" | bc)

##経度計算
longitude_raw=$(cat /tmp/gps.log | grep GPGLL | head -1 | cut -f 4 -d ",")
longitude_ew=$(cat /tmp/gps.log | grep GPGLL | head -1 | cut -f 5 -d ",")
ew=1;test "${longitude_ew}" = "W" && ew=-1
longitude_do=$(echo "scale=0;${longitude_raw} / 100" | bc)
longitude=$(echo "scale=5;${ew} * ((${longitude_raw} - ${longitude_do} * 100) / 60 + ${longitude_do})" | bc)

##HTMLファイル生成
echo "<!DOCTYPE html>" > gps.html
echo "<html lang='ja'>" >> gps.html
echo "<head>" >> gps.html
echo "<meta charset='UTF-8'>" >> gps.html
echo "<title>場所</title>" >> gps.html
echo "</head>" >> gps.html
echo "<body>" >> gps.html
echo "<p>現在地<br>" >> gps.html
echo "<img width=${width} height=${height} src='https://map.yahooapis.jp/map/V1/static?appid=${yahoo_appid}&lat=${latitude}&lon=${longitude}&z=${scale}&width=${width}&height=${height}&pointer=on'>" >> gps.html
echo "</p>" >> gps.html
echo "</body>" >> gps.html
echo "</html>" >> gps.html