2016年12月1日木曜日

HSPでマップ表示

どうもです。趣味でHSPプログラミングをしているてきすとです。
最近自作ソフトにマップを取り入れたいなと思いいろいろ探していたのですが
なかなかいいapiが見つからずGoogleだと設定がめんどくさくゼンリンさんはapiページにアクセス
できませんし。そして最終的にたどり着いたのがYahooのAPIです。
登録が簡単でしかもAPIの種類も豊富だったので結構いいかなと思っています。

取得方法はURLでのリクエストをして画像を取得する形になるのでHSP以外でもできる
と思います。(というかできます。)

まず最初にYahooApi類を利用するにはアプリケーションIDというものが必要なので
こちらから取得します。(YahooJapanアカウントが必要です。)

必要事項を記入して登録を済ませてください。
表示されたIDはメモをしておいてください。

次にこちらからapiの使用方法を確認してください。

地図系APIはYOLPというそうです。(めんどくさいのでapiでいきます。( ´∀` ))
ではささっといきましょう。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.665662327484&lon=139.73091159273

段落してすみません。
まずこれに自分のアプリケーションIDをセットしてブラウザのURLボックスにコピペしてください。
そうしたらこんな画像が表示されると思います。

はいご覧の通り東京ミッドタウンが表示されると思います。
うまく表示されない、エラーが出る場合はどこかが間違ってます。

ではURLの説明です。
http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.665662327484&lon=139.73091159273

※文字が赤色で太字になっているところは重要なところです。
まずlatですがlatは地図の中心の緯度です。
そしてlonは地図の中心の経度です。

なので東京スカイツリー表示するときは
緯度を35.7100627、経度を139.8085117にします。
(ちなみに緯度経度はGoogleMapのURLに載ってます。詳しくはググってください)
表示されましたね。
ですがこれだとどこがスカイツリーなのかわからん。
こういうときはズーム機能を使いましょう。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&z=18
表示される画像はこんな感じです。
え?スカイツリーが中心に来てない?気にしない気にしない♪(すみません最初からミスってました)

それではURLの説明です
http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&z=18

zは縮尺レベルです。
数字が大きければ大きいほど拡大されます。20が最も詳細で1が最も広域らしいです。
ちなみにzを省略すると20が適用されます。

次に画像サイズ設定です。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&z=18&width=700&height=300

このURLを送ると多分画像が横に長くなっていると思います。
(画像は割愛させていただきます。)

ではURLの説明です。
http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&z=18&width=700&height=300

widthは画像の幅です。heightは画像の高さです。どちらもpixel単位です。おk?
どんどんいきましょう。

お次はマーカー機能です。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&pin1=35.7100627,139.8085117&z=18

わお。マーカーが表示されましたよ。


ではURLの説明です。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&pin1=35.7100627,139.8085117&z=18

pinにはいろいろなパラメータがあります。
それぞれのパラメータをabcdeでご説明させていただきます。
  • a : マーカーの中に表示させる文字。種類は数字(0-99)英字(a-z)星マーク(default)の3種類。省略可。
  • b : マーカーの緯度
  • c : マーカーの経度
  • d : マーカーの横に表示されるラベル。省略可。
  • e : マーカーの色。色は赤(red)青(blue)緑(green)黄色(yellow)の4種類です。省略時は赤色。
当てはめるとこんな感じです。
マーカーの緯度、経度はlat,lonが省略された場合そのままマップの緯度経度になります。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&pina=b,c,d,e

実際にやってみます。

http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)
&lat=35.7100627&lon=139.8085117&pinc=35.7100627,139.8085117,東京スカイツリーらへん,blue&z=18

こんな感じでできたと思います。
まだまだいろんな機能がありますが一つ一つ説明すると日が暮れてしまうので
他の機能は割愛させていただきます。

続いては実際にHSPで使ってみます。
今回はネット通信を行うのでhspinet.asモジュールをつかいます。
では先ほど使用したURLを。

#include "hspinet.as"
netinit
neturl "http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)&lat=35.7100627&lon=139.8085117&pin1=35.7100627,139.8085117&z=18"
netload "map.png"
wait 300
picload "map.png"
stop

本当は一回取得するごとに保存せずに表示させたいのですが
私の技術不足で実装不可能です。申し訳ない。

簡易検索ソフト。
latとlonはなしで。

title "住所検索"

#include "hspinet.as"

*start

cls
lat="緯度":lon="経度"
input lat,150
input lon,150
button goto "検索",*go
stop
*go
cls
netinit
neturl "http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)&pin1="+lat+","+lon+"&z=18"
netload "map.png"
mes "検索中..."
wait 200
picload "map.png"
button goto "戻る",*start
stop

これで終わりってちょっと待った。
これじゃあ検索しづらいじゃねぇか。
つーわけで他のapiを使って住所検索できるようにします。
いいサイトがあった。

このサイト使うのだが出力はxmlなのでタグから切り離さなきゃいけない。
そこでこのモジュールをつかってみる。

説明はいろいろと見てほしい。

というわけで作ってみた。

title "住所検索"
#include "hspinet.as"
#include "kurage_mod.as"
#define adTypeBinary            1
#define adSaveCreateNotExist    1
#define adSaveCreateOverWrite   2
#define  CRLF   "\r\n"
#define  LF     "\r"
#define  CR     "\n"
newcom objXMLHTTP, "Microsoft.XMLHTTP"
*start
cls
lat="":lon="":zsize="縮尺レベル(1-20)":flag=""
address="住所やランドマーク名":charcode = "Shift_JIS"
input address,200
input zsize,200
button goto "検索",*go
stop
*go
cls
mes "検索中..."
sURL = "http://www.geocoding.jp/api/?v=1.1&q="+address+""
objXMLHTTP->"Open" "GET", sURL, 0
objXMLHTTP->"Send"
if objXMLHTTP("status") = 200 {
newcom objRS,"ADODB.Stream"
if stat!0 : dialog "ADODB.Streamがサポートされていません。",0 : end
objRS("Type") = 1
objRS->"Open"
sHtml=objXMLHTTP("ResponseBody")
objRS->"Write" sHtml
objRS("Position") = 0
objRS("Type") = 2
objRS("Charset") = charcode
flag=objRS("ReadText")
code = CR
newcom regEx, "VBScript.RegExp"
comres flag
regEx("Pattern") = "\\r\\n|\\r|\\n"
regEx("Global")  = 1
regEx->"Replace" flag,code
regEx = 0
}else{
dialog "取得に失敗しました"
end
}

w(0)="<lat>":w(1)="</lat>"
lat=K_BETWEEN_GET(flag,w)
w2(0)="<lng>":w2(1)="</lng>"
lon=K_BETWEEN_GET(flag,w2)

netinit
neturl "http://map.olp.yahooapis.jp/OpenLocalPlatform/V1/static?appid=(取得したアプリケーションID)&pin1="+lat+","+lon+"&z="+zsize+""
netload "map.png"
wait 200
picload "map.png"
button goto "戻る",*start
stop

どうでしょうか。
なぜか縮尺レベルが適用されませんが原因は後で調べてみます。
というわけで今回はこれにて終了。

0 件のコメント:

コメントを投稿