前回、郵便番号を入力すると、その地域に対する丁目の候補が表示され、選択できるようにしたいと書いたが、解決方法は意外と簡単に見つかった。
全国の市区町村に存在する丁目を提供してくれるAPIがあった。
Geolonia blogというサイト。
以下は東京都世田谷区の丁目を検索した結果の冒頭部分。他の都道府県の市区町村も検索してみたら、データが取得できた。
今回は、とりあえず、東京都世田谷区に絞ってアプリを作成している。もし、全国のピザ販売店の位置情報などが取得できるのであれば、世田谷区に限ることはないが。。。無理な相談!また、そんな膨大なデータを作ることは不可能。
[
{
"town":"赤堤一丁目",
"koaza":"",
"lat":35.655245,
"lng":139.641523
},
{
"town":"赤堤二丁目",
"koaza":"",
"lat":35.658003,
"lng":139.645777
},
......
]
アプリ実行のビデオ:
(まだテスト段階なので、Test用Labelはそのままにしてある)
スクリーンのデザイン:
特にデザインに変更はなし。
ブロックのコード:
丁目候補表示部分のみ。
関数callChomeを実行し、所定のURLに対しGETリクエストを行う。
そして、データが取得できたら(responseCodeでのチェックが抜けているが)、必要なデータの抽出に移る。
市区町村の丁目データから、街の名前、例えば、「桜」が「town」の値として含まれていれば、「桜一丁目」「桜二丁目」・・・を取り出しリストにして表示すればよいと考えた。
しかし、世田谷区に限定して作成しているものの、世田谷区には、「桜」が付く地域が「桜」以外に「桜丘」「桜上水」「桜新町」3つあったのでこのような考え方が通じなかった。そこで、「桜一丁目」と「桜丘一丁目」「桜上水一丁目」「桜新町一丁目」のグループを区別し、目的のデータのみを抽出する方法として、
=> 街の文字数が1つであり、(「桜」は一文字。一文字の街は、世田谷区でも他に「砧」などがある)
=> 丁目を含んだ文字数が4文字であり、(「桜一丁目」これはちょっと強引かもしれない。十一丁目があったらどうする?対応不可。いずれにしても「桜一丁目」「砧一丁目」などが抽出される)
=> 丁目を含んだ街の中に「桜」が含まれているならOK(「桜一丁目」〜「桜三丁目」までを抽出成功)
という条件とした。世田谷区の場合はうまくいったが、他の地域ではダメだろう。もう少しユニバーサルに適用できるロジックを考える必要があるだろう。今回は、これで次に進む。
リストができれば、chomeListPickerに表示。
選択された丁目をchomeLableに表示し、次へのボタン( >> )も表示。
************************************************************
因みに、全国の市区町村に存在する丁目のAPIから世田谷区に限定して取得したデータ(JSON)の桜が含まれている部分は以下。(抜粋)
[
......
{
"town":"桜一丁目",
"koaza":"",
"lat":35.645526,
"lng":139.641136
},
{
"town":"桜二丁目",
"koaza":"",
"lat":35.643813,
"lng":139.637878
},
{
"town":"桜三丁目",
"koaza":"",
"lat":35.640435,
"lng":139.637264
},
.......
{
"town":"桜丘一丁目",
"koaza":"",
"lat":35.642736,
"lng":139.632385
},
......
{
"town":"桜新町一丁目",
"koaza":"",
"lat":35.628891,
"lng":139.642972
},
.....
{
"town":"桜上水一丁目",
"koaza":"",
"lat":35.658089,
"lng":139.631515
},
......
.......
]
******************************************************
前回までのブログ:
MIT App Inventorであのアプリを作ってみる (KanooPizza 1)
※コメント投稿者のブログIDはブログ作成者のみに通知されます