Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
GPS機能を利用した高低差表示機能付き地図作成システム
井上和也
平成 23 年 2 月 2 日
3
目 次
第 1章 はじめに 5
1.1 はじめに . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 近年の地図情勢 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 GPSとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
第 2章 問題 7
2.1 問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 地図サイト比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 独占による問題点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 OpenStreetMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 提案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
第 3章 地図作成システムの提案 13
3.1 目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 今回使用した環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 ログの取りだし、データの形式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4 XMLとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.5 NMEAとは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.6 プログラム説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6.1 用語説明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6.2 プログラムの仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
第 4章 考察 21
4.1 考察 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 今後の予定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
第 5章 付録 25
概要
昨今では、車のカーナビゲーションシステムや、専用のGPS機械などだけではなく、携帯電話など身近なものにもGPS機能が組み込まれ、より私たちの生活に関わりの深いものとなってきている。今回の研究では、GPSについて調べ、利用して、私たちの生活をより楽にできるような地図を作ることができないか考えた。一目見るだけで道の傾斜の有無や、そのきつさが理解することができれば、移動の計画を立てる上で便利ではないだろうか。また、そのような地図を簡単に作ることができるシステムがあれば、多くの人が利用できるような新しい地図を作ることもできるのではないだろうか。今世界でつかわれている技術を学び、新しい可能性を模索していくと共に、全国で普及しているゼンリンの地図のように、多くのひとに愛用され、便利に思われるような地図を作ることができるシステムの開発を目標とし、研究を進めていく。
5
第1章 はじめに
1.1 はじめに近年、GPSは専用機器が必要なものではなく、携帯電話など、身近な道具で簡単に利用できるようになって
きている。今回の研究では、そのGPSを利用して、私たちの生活を便利にすることができる何かを開発してい
くと共に、それらに利用されている技術を学んでいきたいと考えた。
1.2 近年の地図情勢現在、地図メーカーには国土地理院、ゼンリン、昭文社など様々なものがあり、シェアを競い合っている。地
図メーカーとしてはほかにも北海道地図株式会社、株式会社アルプス社などがある。昭文社は紙地図市場では
MAPPLEの名称で愛用され、書店でもよく見かけるものの、後述するようにインターネット上の無料地図サイ
トではゼンリンの地図データを使用しているものが多く、電子地図では一歩遅れをとってしまっている。[16]近
年ではインターネット上から無料で地図を調べることができる地図サイトも増えており、携帯電話でどこからで
も見ることができる、無料で利用できるなどの理由で紙地図の売り上げは落ちてきてしまっている。
1.3 GPSとはGPSとは、グローバルポジショニングシステム (GlobalPositioningSystem)の略で、全地球測位システムの
ことである。GPSの衛星測位システムは、GPS衛星 (スペースセグメント)、地上管制 (コントロールセグメン
ト)、GPS受信機 (ユーザセグメント)の三つのセグメントから構成されている。今現在GPSは地上デジタル放
送や、ナビゲーションシステムなどに利用されている。GPS受信機は、四つの衛星データから緯度、経度、高
度、時刻を知ることができる。四つすべてのデータを得るためには四つの方程式が必要となるため、四つ以上の
衛星と通信する必要がある。実際には急激に移動することはないため、ナビゲーションシステムでは一度四つ以
上の衛星と通信してしまえばその後は通信できる衛星の数が減っても以前のデータと比較して計測を続けるも
のも多い。自身の居場所が分かるため、車のカーナビゲーションシステムや携帯電話の地図機能などにも利用
され、多くの人が旅行する際などに使用している。また、電波の送信もできる携帯電話との組み合わせ、緯度、
経度から居場所を調べ位置情報を送信することで児童誘拐や徘徊老人対策等の応用も広がっている。
図 1.1: GPS
7
第2章 問題
2.1 問題今、インターネット上にはマピオン (Mapion)、goo地図、マップファンウェブ (MapFanWeb)、いつもNAVI(株
式会社ゼンリン)など、多くの地図サイトが存在している。しかしその中でも、googleマップ1が簡単に使える
細かくて便利な地図ということで多くの人に利用されている。ここで使われている地図はゼンリンが権利を所持
しており、ほかに対抗できている地図もなくこの業界を独占しているのが現状となっている。このように 1つの
地図が業界を独占してしまっている現状のままではまずいのではないか。
2.2 地図サイト比較• googleマップ [6]
http://maps.google.co.jp/
ユーザーが線を引いたり、マーカーを置いて、自分だけのマップを作ることができる。また、API2を用い
て、Webページに地図を埋め込むことができる。ストリートビューという機能があり、これを使うことで
一部の対応している地域のみではあるが道路の風景をそこに自分が立っているかのような視点で見ること
ができる。
図 2.1: Googlmap
1Google 社が提供するオンライン地図情報サービス。個人で到底の場所にマーカーを設置し、自分だけの地図を作るというようなこともできる。
2ApplicationProgramInterfaceの略で、ソフトウェアを開発する際に使用できる命令や関数の集合、また、それらを利用するためのプログラム上の手続きを定めた規約の集合のこと。
図 2.2: ストリートビュー
• マピオン [7]
http://www.mapion.co.jp/
ガソリン価格、マピオン住まい探しによる不動産情報、マピオントラベルによる宿泊施設なども調べるこ
とができる。また、携帯に地図の URLを送ることや、地図上で指定した複数地点間の距離を調べること
ができる。
図 2.3: Mapion
• goo地図 [8]
http://map.goo.ne.jp/
自動車歩行者ナビや、グルメ、宿泊などの地域情報、goo求人によるアルバイト情報、goo天気による詳
細地域の天気予報なども調べることができる。
図 2.4: goo地図
• マップファンウェブ [9]
http://www.mapfan.com/
ルート検索、表示した地域の数時間後および 1週間の天気予報、周辺地域のグルメ、駅・交通情報などを
ジャンルから検索することもできる。また、調べた地図に自由に絵などを書き、自分なりにメモしたもの
をメールにして送ることができる。
サービスを提供しているインクリメント・ピー株式会社が開発した地図データを使用している。
図 2.5: MapFan Web
• いつも NAVI[10]
http://www.its-mo.com/
今日、明日、週間の周辺天気、周辺地域のグルメ情報などを調べることもできる。また、ホームページに
地図を貼り付けることができる。
図 2.6: いつも NAVI
• yahoo地図 [11]
http://map.yahoo.co.jp/
周辺のお店や施設等の検索、天気、最寄り駅を調べることもできる。
図 2.7: yahoo地図
googleマップ マピオン goo地図 マップファンウェブ いつも NAVI yahoo地図
ゼンリン ゼンリン ゼンリン インクリメント・ピー株式会社 ゼンリン ゼンリン
表 2.1: 使用している地図データ
2.3 独占による問題点1つの企業が市場を支配してしまうことは様々な問題へとつながる。独占している企業が意図的に使用料金を
引き上げたとしてもほかに企業がなければその企業のものを使い続ける他ない。また、対等の企業と競い合うこ
ともないため、ユーザーの声を聞き入れ、より使い易いものにするという企業努力をする必要がなくなり、停滞
してしまう可能性もある。
2.4 OpenStreetMap
http://www.openstreetmap.jp/ 企業の地図に縛られず、誰にでも使うことのできる地図を作るという目的
のプロジェクトとして、OpenStreetmMapというものがある。OpenStreetMap(OSM)は、道路地図などの地理
情報データを誰でも利用できるよう、フリーの地理情報データを作成することを目的としたプロジェクトであ
る。[18] 誰でも自由に参加し、誰でも自由に編集でき、誰でも自由に利用する事が出来る。Googleマップは無
料で使うことはできるが、自由に使うことができるわけではなく、使用するための利用規約がある。[19]それに
基づいて使うだけで目的が果たせるのならばそれで充分だが、プログラマーや、社会活動者など、利用規約に基
づいているだけでは不都合のある人たちもいる。そんな人たちのため誰のものでもない、自由な地図を作るこの
プロジェクトが発足した。現在はリニューアル作業中ということだが、有志がデータを提供し、組み合わせるこ
とで地図を作成していっている。
2.5 提案著作権がフリーで、なおかつ既存の地図にあるような天気検索、周辺検索などではない、高低差表示機能のよ
うな新しい機能を備えた地図があれば私たちの生活はより便利になり、1つの地図が独占している現状も打破で
きるのではないか。
13
第3章 地図作成システムの提案
3.1 目的
図 3.1: 目標図
今回、GPSを利用して、googleマップにはない機能を持った地図を作ることができるシステムを作る。google
マップにはない、一目で高低差までもが理解できる機能を持った地図を作ることができれば私たちが使っていく
上でより便利な地図になるのではないだろうか。GPSのログを使うことで、高低差表示機能付きの地図を出力
してくれるようなプログラムを目標として研究を進めていく。
3.2 今回使用した環境• HOLUX M-241c
今回GPSのログを取得するのに使用した HOLUXが開発したGPS受信機。今後はGPSロガーと表記す
る。
単三電池一本で稼働し、LCDディスプレイには位置情報、速度、可能なログメモリーサイ ズ、日付と時
刻表示される。緯度経度を計測する時間の間隔など細かい設定も可能。
主な特徴として、
– LCDパネルで現在速度や現在の緯度経度を表示することができる
– 約 13万ポイント記録することができる
– 12時間連続稼働可能
– 秒、距離で記録間隔を設定できる
– NMEA0183フォーマットでデータを保存している
などがある。NMEAに関しては、3.5で後述する。
• GPSbabel[12]
GPS受信機で採取した、GPSログファイルなどのデータは取得したデータによってほとんど互換性がな
いのが実情である。しかし、フリーソフトであるこのGPSbabelを使うことにより、GPSログファイルの
フォーマットを指定してデータを取り出すことができる。
こちらを使用してデータの形式を統一し、今回作成したプログラムで使うことができるようにした。今回使
用したのは ver1.3.6。Microsoft Windows 95、98、Me、2000、XPVista、Linux、UnixWare、OpenServer、
Solaris、FreeBSD。これら OSに対応している。主な機能として、GPS受信機から受けとったデータを
様々なプログラムで使えるようにデータを形式を選択して変換することができる。対応しているデータ形
式が非常に多いが、今回は XML形式に変換する。Robert Lipeが 2002年に開発したもので、約 50もの
データ形式に対応し、よく使うものとしては GPX、KML、XMLなどの形式がある。
3.3 ログの取りだし、データの形式今回は GPSbabelを使い、NMEA形式から XML形式に変換してログを取り出した。取り出したログの中に
は、
各計測時点の時間
各計測時点の緯度経度
各計測時点の高度
各計測時点の進行方向
計測中の最高速度
計測中の平均速度
計測中の最高高度
計測中の最低高度
計測開始時間
計測終了時間
移動距離
が記録されている。速度などの情報は今回作るシステムで必要なさそうなため、必要になる緯度経度、高度を抜
き出して使っていく。
こちらが取り出した XMLファイルの中身の 1地点分である。
<Placemark>
<name>TP000001</name>
<Snippet/>
<description><![CDATA[
<table>
<tr><td>Longitude: 139.852829 </td></tr>
<tr><td>Latitude: 38.929569 </td></tr>
<tr><td>Altitude: 218.189 ft </td></tr>
<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 38.6 </td></tr>
<tr><td>Time: 2010-05-17T00:13:43Z </td></tr>
</table>
<LookAt>
<longitude>139.852829</longitude>
<latitude>38.929569</latitude>
<tilt>66</tilt>
</LookAt>
<TimeStamp><when>2010-05-17T00:13:43Z</when></TimeStamp>
<styleUrl>#track</styleUrl>
<Point>
<coordinates>139.852829,38.929569,66.503906</coordinates>
</Point>
</Placemark>
XMLファイルの中には次のような各地点ごとの緯度、経度、高さだけを並べてまとめている部分があり、今
回はその部分を利用したプログラムを作成した。
<Placemark>
<name>Path</name>
<styleUrl>#lineStyle</styleUrl>
<LineString>
<tessellate>1</tessellate>
<coordinates>
139.837723,38.903492,51.267578
139.837387,38.903847,36.540039
139.837189,38.904331,39.767578
139.837097,38.904869,38.213867
139.836945,38.905361,37.438477
139.836792,38.905933,40.316406
(中略)
139.814377,38.904430,47.473633
139.814331,38.904961,55.862305
139.814484,38.904823,10.082275
139.814423,38.905075,51.295898
139.814285,38.905155,48.365234
</coordinates>
</LineString>
</Placemark>
3.4 XMLとは1986年に国際標準化機構である ISO(InternationalOrganizationforStandardization)が制定した汎用的なデー
タ記述言語 SGML(Standard Generalized Markup Language)を、Web上で利用できるように W3Cが開発し
たもので、その基本的な骨格は SGMLから引き継がれている。
XML(ExtensibleMarkupLanguage)は、インターネット上で文書やデータを交換したり、配布したりするとき
の、標準となる可能性のある重要なマークアップ言語である。[13]人とアプリケーションの両方がその目的に
そって理解し、処理できる形式でデータを記述すること。それが XMLである。
XMLとは、Webページを含め、Webにあるデータを記述する汎用的なデータ記述言語である。
3.5 NMEAとはNMEA[17]は米国海洋電子機器協会(National Marine Electronics Association)が定めた規格で、受信機と
ナビゲーション機器の通信に使用されるプロトコルのことである。その中でも、NMEA-0183は、GPS受信機
とナビゲーション機器の間をシリアルポートを利用して通信するための規格である。今回研究に使用した GPS
ロガーはこの形式がフォーマットとなっている。
3.6 プログラム説明GPSロガーを使って保存した移動経路のログをコマンドライン1から指定し、各地点の緯度経度を配列に入れ
ていく。東北公益文科大学の緯度経度を基準点とし、そこからの緯度経度の差を基に点を打っていき、Ruby/tk
を用いて線を引き、画面に表示させる。
3.6.1 用語説明
Ruby
Ruby[14]とはまつもとゆきひろが開発したスクリプト言語とその処理系のことで、オブジェクト指向的な言
語構造になっているがプログラミングをすることも可能になっている。作者が個人で開発しているフリーソフト
ウェアで、強力なテキスト処理能力、シンプルな文法などの特徴を持っている。
tk
Tkは Tclから利用するツールキットで、GUI(graphical user interface)ライブラリのこと。1990年代初頭に
Tclにバンドルされる形で公開された。[15]Tcl用に開発されたものではあるが、Tclに限らず、Perl、Python、
Rubyなど様々な言語からも利用することができる。John K. Ousterhoutが開発した。
Ruby/tk
Tcl/Tkの Tkを Rubyから利用できるようにしたものが Ruby/Tkである。
Tclは各ソフトウェアに搭載されているマクロ言語を統一することを目指して開発されたインタプリタ言語のこ
とで、the command languageの略と言われている。Tkは Tclから利用するツールキットで、GUI(graphical
user interface)ライブラリのこと。
これを使うことで、Rubyで GUIプログラムを作ることができる。
1情報の表示を文字によって行い、すべての操作をキーボードを用いて行うユーザーインターフェースのこと。キーボードからコマンドを入力し、コンピュータに支持を与える。
3.6.2 プログラムの仕組み
はじめに、試作段階として googlemapAPI2を使用して地図を出力し、HTMLファイルとして出力させるプロ
グラムを作成した。そのプログラムを用いて実際に出力した地図が図 3.2である。
図 3.2: googlemapAPIを用いた地図
しかし、これでは結局ゼンリンの地図を用いていることになるため、問題の解決にはなっていない。そこで、筆
者自身が簡単な地形を図にし、その上に経路を出すことで、オリジナルの地図を作ることができるプログラムを
作成した。
そちらのプログラムを使用して作った地図が図 3.3である。
図 3.3: 今回作ったプログラムで出力した地図
googlemapAPIを用いた地図と、作ったプログラムで出力した地図で同じ経路を表示できていることがわかる。
2googlemapAPI は javascript の関数群として登録されており、これを用いることで googlemap と同様の地図を自分で作ったWEB
ページに表示させることができる。
コマンドラインからプログラムを起動すると図 3.4のようなウィンドウが立ち上がる。
配列から変数を読み込み経路を線として引くメソッドを組み、reloadをクリックすることで図 3.5のようなメ
ソッドが起動する。sizeのバーを動かすことで大きさを決め、reloadすることで画面を更新し、拡大、または縮
小することができる。
現在は 4色にしか分かれていないが、高低差がもっと激しいログがとれ次第、そちらのデータを目安にもっと細
かく分けていく予定である。高いほうから順に白、黄、橙、赤となっている。
図 3.4: 実際にプログラムを起動した図
図 3.5: アルゴリズム
21
第4章 考察
4.1 考察移動経路を確認するには、各時間ごとの位置をつないでいけばよい。緯度経度から各計測時点での位置がわか
るため、計測された時間の順番にその時点での緯度、経度の位置に点を打っていき、点をつなげばそれが移動経
路となる。ログデータ内には時系列順に保存されていたため、順番に配置していくことで経路として表示してく
れる。
今回は東北公益文科大学を基準点としてそこからの緯度経度の差を基に座標を決定した。
まだログも少ないため、地図ではなくただの移動経路を表示するだけのものになっているが、複数のログから経
路を作成し、すべての経路を重ねることで道の形が出来上がっていく。
線を引く際に変数を使用し、その変数を変更することで大きさを変えることができるようにした。しかし、reload
するたびに読み込み、線を引き直すためか、かなりプログラムが重くなってしまったため、今後はこの点の改良
と、以前から目標にしていたが実現できていないスクロール機能をつけることで、より使い易く、便利なプログ
ラムになると考える。実際に拡大縮小機能をつける前と比較してみる。
ruby tkmaptest10.rb track.xml 1.56s user 0.10s system 35% cpu 4.654 total
ruby tkmaptest14.rb track.xml 9.42s user 0.07s system 49% cpu 18.990 total
tkmaptest10.rbが改良前、tkmaptest14.rbが改良後のプログラムである。上記のように、約 4倍も時間がかかっ
てしまっている。
4.2 今後の予定GPSロガーを持って同じ道を二度通った際に、微妙にずれて記録されるため、図 4.1のように、同じ道を通っ
たにも関わらず行きと帰りで別の経路として記録されてしまう。
http://roy.e.koeki-u.ac.jp/~c108019/resume/mapopen5.html
図 4.1: 地図の拡大図
このような場合に補正をかけて、しっかりと一本の道として表示するようなプログラムを組んでいく。また、ス
クロール機能をつけ拡大状態でも地図全体を見ることができるようにし、reloadボタンを押さずともリアルタ
イムで拡大、縮小ができるように改良する。
現在プログラムに使用する背景画像をWebアクセスから読み込み、表示させているのだが、学校外ではアクセ
スできないため場所に保存されているため、学校外でプログラムを使用することができない。この点も含めて改
善していく。
最終的には、学校外からでも使えるようなプログラムにすることで誰でも自由に使えるプログラムにし、様々な
人が抜き出したログから大きな地図を作るために、複数のログを組み合わせて地図に表示する機能をつける。ま
たは、一度読み込んだ経路を記録し、別の経路を読み込んだ際は以前のものに重ねて表示するような機能をつけ
ることで、より大きな地図を作れるようなシステムにする。
23
参考文献
[1] GPSの仕組みと応用技術 測位管理,受信でー他の詳細から応用製作まで 10/07/14 CQ出版社 ト
ランジスタ技術編集部 p.13-31
[2] Ruby/tk
http://roy.e.koeki-u.ac.jp/~yuuji/2010/pf3/12/tk.html 10/11/7 広瀬雄二
[3] IT用語辞典 e-words
http://e-words.jp/ 11/1/7
[4] ITpro 辞書
http://itpro.nikkeibp.co.jp/dictionary/index.html 11/1/7
[5] XML完全解説 SIST 11/01/25 技術評論社 XML/SGMLサロン p.9-12
[6] Googleマップ
http://maps.google.co.jp/ 11/1/7
[7] Mapion
http://www.mapion.co.jp 11/1/7
[8] goo地図
http://map.goo.ne.jp/ 11/1/7
[9] MapFan Web
http://www.mapfan.com/ 11/1/7
[10] いつも NAVI
http://www.its-mo.com/ 11/1/7
[11] yahoo地図
http://map.yahoo.co.jp/ 11/1/7
[12] SourceForge.JP, gpsbabelプロジェクト
http://sourceforge.jp/projects/sfnet\verb_gpsbabel/ 11/1/7
[13] Extensible Markup Language (XML)
http://www.w3.org/XML/ 11/1/7
[14] まつもとゆきひろ, オブジェクト指向スクリプト言語 Ruby
http://www.ruby-lang.org/ja/ 11/1/7
[15] Tcl/Tk Software
http://www.tcl.tk/software/tcltk/ 11/1/7
[16] SankeiBiz, 【Web】地図業界の“復権” ネット事業へ舵→多様化展開→売り上げアップ
http://www.sankeibiz.jp/business/news/100902/bsd1009020921018-n1.htm 11/1/7
[17] NMEA 0183
http://www.weblio.jp/content/NMEA+0183 11/1/27
[18] OpenStreetMap
http://www.openstreetmap.org/ 11/1/27
[19] OpenStreetMap Japan
http://www.openstreetmap.jp/ 11/1/27
25
第5章 付録
mapopen5.rb
$KCODE = ’e’
n = 1
if ARGV[0] == nil
print("ファイルを指定してください\n")
exit
end
open("mapopen5.html", "w") do |c108019|
open(ARGV[0]).read.each_line{|huga|
if huga !~ /</
if huga =~ /([0-9]*\.[0-9]*),([0-9]*\.[0-9]*)/
c108019.printf(<<EOS,huga[$2],huga[$1])
<html>
<head>
<title>Hello world in Google Maps API version3</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript"
src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var centerPos = new google.maps.LatLng(%s, %s);
var mapOptions = {
zoom : 13,
center : centerPos,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
EOS
end
end
}
open(ARGV[0]).read.each_line{|hoge|
if hoge !~ /</
if hoge =~ /([0-9]*\.[0-9]*),([0-9]*\.[0-9]*)/
c108019.printf(<<EOSSS,n,hoge[$2],hoge[$1],n,n,n,n,n)
var newposition%d = new google.maps.LatLng(%s, %s);
var markerOptions%d = {
position : newposition%d,
map : map,
title : "point%d"
};
var marker%d = new google.maps.Marker(markerOptions%d);
EOSSS
n += 1
end
end
}
c108019.print(<<EOSS)
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%;height:100%"></div>
</body>
</html>
EOSS
end
tkmapopen14.rb
# -*- coding: utf-8 -*-
require ’tk’
require ’open-uri’
require ’tkextlib/tkimg/png’
$KCODE = ’e’
$ido = Array.new
$keido = Array.new
$koudo = Array.new
url = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei.png’
url3 = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei3.png’
url5 = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei5.png’
url6 = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei6.png’
url2 = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei2.png’
url1 = ’http://roy.e.koeki-u.ac.jp/~c108019/resume/haikei1.png’
$ura = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url1){|s| s.read}))
$ura2 = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url2){|q| q.read}))
$ura3 = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url3){|w| w.read}))
$ura4 = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url){|e| e.read}))
$ura5 = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url5){|r| r.read}))
$ura6 = TkPhotoImage.new(’data’=>Tk.BinaryString(open(url6){|t| t.read}))
i = 1
w = 0
dd = 0
if ARGV[0] == nil
print("ファイルを指定してください\n")
exit
end
def test(n)
TkcLine.new($cv, 0, 300, 600, 300,’fill’=>’black’, ’width’=>1 )
TkcLine.new($cv, 300, 0, 300, 600,’fill’=>’black’, ’width’=>1 )
if $size == 1
$img = TkcImage.new($cv, 300, 300,’image’=>$ura)
elsif $size == 2
$img = TkcImage.new($cv, 300, 300,’image’=>$ura2)
elsif $size == 3
$img = TkcImage.new($cv, 300, 300,’image’=>$ura3)
elsif $size == 4
$img = TkcImage.new($cv, 300, 300,’image’=>$ura4)
elsif $size == 5
$img = TkcImage.new($cv, 300, 300,’image’=>$ura5)
elsif $size == 6
$img = TkcImage.new($cv, 300, 300,’image’=>$ura6)
end
while true
if $koudo[n] >= 80
$l = TkcLine.new($cv, $ido[n].to_f * $size * 1000 + 300,
$keido[n].to_f * $size * 1000 + 300,
$ido[n+1].to_f * $size * 1000 + 300,
$keido[n+1].to_f * $size * 1000 + 300,
’fill’=>’white’, ’width’=>2)
elsif $koudo[n] >= 50
$l = TkcLine.new($cv, $ido[n].to_f * $size * 1000 + 300,
$keido[n].to_f * $size * 1000 + 300,
$ido[n+1].to_f * $size * 1000 + 300,
$keido[n+1].to_f * $size * 1000 + 300,
’fill’=>’yellow’, ’width’=>2)
elsif $koudo[n] >= 30
$l = TkcLine.new($cv, $ido[n].to_f * $size * 1000 + 300,
$keido[n].to_f * $size * 1000 + 300,
$ido[n+1].to_f * $size * 1000 + 300,
$keido[n+1].to_f * $size * 1000 + 300,
’fill’=>’orange’, ’width’=>2)
else
$l = TkcLine.new($cv, $ido[n].to_f * $size * 1000 + 300,
$keido[n].to_f * $size * 1000 + 300,
$ido[n+1].to_f * $size * 1000 + 300,
$keido[n+1].to_f * $size * 1000 + 300,
’fill’=>’red’, ’width’=>2)
end
n += 1
if $ido[n+1] == nil
break
end
end
TkcLine.new($cv, (38.894774-38.898803)*$size*1000+500,
(139.819393-139.818875)*$size*1000+600,
(38.894774-38.889822)*$size*1000+500,
(139.819393-139.818932)*$size*1000+600,
’fill’=>’blue’, ’width’=>3 )
end
$cv = TkCanvas.new(’width’=>600, ’height’=>600).pack
$img = TkcImage.new($cv, 300, 300, ’image’=>$ura)
open(ARGV[0]).read.each_line{|hoge|
if hoge !~ /</
if hoge =~ /([0-9]*\.[0-9]*),([0-9]*\.[0-9]*),([0-9]*\.[0-9]*)/
$keido[i] = (38.894774 - hoge[$2].to_f)
$ido[i] = (-139.819393 + hoge[$1].to_f)
$koudo[i] = hoge[$3].to_f
i += 1
end
end
}
TkcLine.new($cv, 0, 300, 600, 300,’fill’=>’black’, ’width’=>1 )
TkcLine.new($cv, 300, 0, 300, 600,’fill’=>’black’, ’width’=>1 )
$size = TkVariable.new(’3’)
TkScale.new {
variable $size
to(1)
from(6)
label ’size’
}.pack(’side’=>’left’)
TkButton.new("text"=>"reload", "command"=>proc{test(1)}).pack("side"=>"left")
i -= 1
Tk.mainloop