APIを使用して、緯度経度を含んだ情報をXML形式で取得する方法を紹介しました。GoogleAPI~住所から緯度経度を取得する(その1)~で確認できます。今回はGoogleAPIを使用して取得したXMLの仕様を確認し、そこから緯度経度を取得してみたいと思います。Codeを参考にしました。リンク先の説明はJSONになってますが、実際に動作テストした結果、リンク先に記載されている内容と合致していたので、今回はこれを基にプログラムを作成しました。その内容から見るべきXPATHは以下の2つと考えました。1.kml/Response/Status/codeリターンコードを示しています。「200」が正常終了。それ以外は今回の処理では異常終了とみなす事にします。Codeに記載されています。カンマ区切りで示しています。※高度は常に0が返されます。上記内容を踏まえてWindowsフォームより入力した住所に対して、GoogleAPIを使用して緯度と経度を求めます。Class[/vbnet]■実行結果ちなみにGoogleAPIの仕様上は、施設名などでも緯度経度の検索は可能ですが、複数ヒットした場合、このプログラムでは考慮されていません。複数ヒットの場合は、最初のデータが使用されます。次回は2つの住所から、2点間のおおよその距離を求める方法にチャレンジしてみたいと思います。2009年1月14日GoogleAPI~住所から緯度経度を取得する(その1)~郵便番号構想を始めてから、住所に関する事にどっぷりと浸かっています。住所を使って他にも出来る事は無いか・・・ふと2つの住所を使って、2点間の距離を求める事が出来たら面白いのではないか?なんて事を考えて見ました。住所だけでは2点間の距離を求めることは出来ないので、住所からある情報を検索してそこから2点間の距離を求める方法を考えました。それは緯度と経度です。住所から緯度と経度を検索する事なんで出来るのでしょうか?出来ます。APIを公開していました。APIキーの取得を行ないます。APIキーは以下のサイトより入手できます。keyを取得するが参考になると思います。※このページではJavaScriptによる緯度経度の取得方法も記載されています。今回の記事を作成するにあたっても、参考にさせていただきました。JavaScriptで実装する場合は、専用のオブジェクトが用意されていますが、VB.netで実装する場合はURIにパラメータを直接指定して、その戻り値(レスポンス)を元に緯度経度を取得する形式となります。詳細はこちら今回は戻り値をXML形式で取得し、そこから緯度経度を抽出する方式とします。GoogleAPIにリクエストするURIの仕様は以下の通りです。変換する処理のことです。地理座標を使用して、マーカーを配置したり地図の位置決めを行うことができます。サービスを備えています。ジオコーディングする住所。生成される出力の形式。※ジオコーディングする住所はURLエンコードが必要です。以下の様な結果が表示されます。これをプログラムで読み込むには以下のコードを記述します。/&gt;&lt;/ExtendedData&gt;&lt;Point&gt;&lt;coordinates&gt;139.7454109,35.6586345,0&lt;/coordinates&gt;&lt;/Point&gt;&lt;/Placemark&gt;&lt;/Response&gt;&lt;/kml&gt;[/xml]XmlDocumentオブジェクトを使用すると、非常に簡単に結果を取得する事が出来ます。次回は取得したXML情報から、緯度と経度を取得する方法を紹介します。日本郵便のサイトより、郵便番号データの仕様を確認したいと思います。●先ずは前提条件(データの範囲)1.郵便番号は、町域(町名から○丁目を除く部分、および大字)に設定しており、小字または通称には原則として設定していない。料金受取人払等へ個別の郵便番号を設定している。日本郵便のサイトには上記の2点が「郵便番号の設定範囲」として記載されています。※それぞれの意味はこちらを参照して下さい。大字:小字>>1については、このデータを元に検索エンジンを作るので、この仕様は受け入れざるを得ません。郵便番号にその答えがありました。郵便番号で表す範囲(図1参照)」の「イ」に記載されている内容を見ると、そもそも「小字又は通称」には郵便番号を設定していないそうです。!という事は、「小字または通称」は住所データに含まれていないのではなく、そもそも存在しない事になるので、1については問題ありません。>>2については日本郵便より提供されている郵便番号データは大きく分けて2種類存在します。今回作成する郵便番号検索サービスは「住所の郵便番号」に対して行います。「事業所の個別郵便番号」は現時点では対応の予定はありませんが、時間があれば対応していきたいと思います。「住所の郵便番号」は以下の2種類が存在します。1.読み仮名データの促音・拗音を小書きで表記しないもの(ホツカイドウ)2.読み仮名データの促音・拗音を小書きで表記するもの(ホッカイドウ)これらの内容をまとめると、住所データは以下の様な構成になっている事になります。┣読み仮名データの促音・拗音を小書きで表記しないもの┗読み仮名データの促音・拗音を小書きで表記するもの(★)今回は★のデータを使用しようと思います。それは何故かって?検索結果に読み仮名を表示する時に、正しい読み仮名で表示させたいからです。日本郵便にて確認できます。住所データの各カラムの仕様は以下の通りです。日本郵便にて確認できます。いくつかある注意事項の中で、特に注意すべき内容が以下の通り。JIS)を使用している。X0208-1983を使用し、規定されていない文字はひらがなで表記している。2.全角となっている町域名の文字数が38文字を超える場合、また、半角カタカナとなっている町域名のフリガナが76文字を越える場合には、複数レコードに分割している。UTF-8にしてほしい感じです。JIS」で記載できない文字は「ひらがな」になってしまうとの事。JIS」で表現できない住所が存在した場合に検索にヒットしないことになります。件数は少ないと思いますが、解決すべき課題が1つ増えました。次に2について・・・これも今どき38バイトはある意味スゴイ!このデータを管理しているシステムは、それなりに古い仕様で作られていると予想されます。そんな事は良いとして、これでは正しく検索できないので、複数レコードを1レコードにまとめないといけません。実際のデータを見てみると、複数レコードの場合は、同じ郵便番号(0660005)で連続してデータが存在しています。“,”0660005′′,”ホツカイドウ”,”チトセシ”,”5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”5、1137-3、1392、1657、1752番地)“,1,0,0,0,0,0であれば仕様は簡単で、郵便番号が連続して複数存在した場合は、前のレコードを繋げる様な処理にすれば、1つのレコードに収まります。427-3」の郵便番号を検索する際に、ものすごく複雑な処理を書かなければいけなくなってしまいますので・・・ただ気になるのが、No13の「一つの郵便番号で二以上の町域を表す場合」です。これに該当する(値が1になっている)データを見てみると、以下の様な感じになっています。(赤字の部分です)07408,”96931′′,”9693102′′,”フクシマケン”,”ヤマグンイナワシロマチ”,”ニシミネ”,”福島県”,”耶麻郡猪苗代町”,”西峰“,0,0,0,1,0,007408,”96931′′,”9693102′′,”フクシマケン”,”ヤマグンイナワシロマチ”,”ネコイシヤマ”,”福島県”,”耶麻郡猪苗代町”,”猫石山“,0,0,0,1,0,007408,”96931′′,”9693102′′,”フクシマケン”,”ヤマグンイナワシロマチ”,”ハヤマ”,”福島県”,”耶麻郡猪苗代町”,”葉山“,0,0,0,1,0,0このデータは見るからに1行のデータとして独立しています。これは郵便番号が同じだからと言って、連続したレコードを繋げる事は出来ません。よってこれらのケースは除外しつつ、複数行データを単一データに加工します。著作権を主張しません。自由に配布していただいて結構です。要はこのデータを煮ようが焼こうが好きにしてよいという事です。いう事であれば、自由に使わせて頂きます!とりあえず他にも色々と課題が出てきそうですが、日の目を見るまで頑張ります。郵便番号検索サービス構想~最新住所データの取得~検索プログラムを作る前に、先ずは最新の全国の住所データが必要です。日本郵便なんか化石を掘り当てた気分です。これをダウンロード!全国版で1.7MB弱、意外と容量は少ないです。“,”0600031′′,”ホツカイドウ”,”サツポロシチユウオウク”,”キタ1ジヨウヒガシ”,”北海道”,”札幌市中央区”,”北一条東”,0,0,1,0,0,0見た感じは昔の仕様と変わっていないようです。本当に仕様が変わっていないか、住所データの仕様と検索プログラムのソースを見比べてみました。!まだweb化が出来ていないので、ローカルPCで実行した結果の画像で報告します。4丁目2-8正しい郵便番号がヒットしました。郵便番号から住所検索を行なって確認しました。郵便局のサイトなので間違いないでしょう。ゆうびんねっとgoogleの郵便番号検索用ガジェットより比較してみると、なんとこの住所でヒットしたのはたったの1サイトのみでした。これは初っ端からなかなかの好成績!※郵便局のサイトがヒットしなかったのは、ちょっと驚きでした。残った1サイトを今後のベンチマークとし、検索性能のアップに取り組もうと思います。一児の父となってじっくり部屋でパソコンをする機会も少なくなり、最近は子供の子守をしながらノートパソコンを使ってちょこちょこブログを書く日々が続いています。そんな中、昔使っていたディスクトップPCのフォルダ整理をしていたら、郵便番号検索のアルゴリズムを調査・研究していた時の資料(プログラム)が出てきました。郵便番号から住所を検索する、というのは一般的にありますが、住所から郵便番号を検索する機能はあまりありません。理屈は簡単で、郵便番号から住所が検索できるのであれば、その逆も出来るのではないか、といった感じです。実際郵便番号を検索するサイトはいくつか存在し、有名なのは「郵便番号検索」でググって、最上位にヒットする公官庁(郵政省)のページにある郵便番号検索です。このサイト、実際に自分の住所を入力して試してみると分かりますが、ほとんどのケースで郵便番号が検索されません。これなら独自に作った方がより検索制度の高い機能が作れるのではないか、という思いつきで始めたのがきっかけでした。今から5年以上も前の話です。世の中を知らない青二才の無謀な思い付きでした。そのプログラムを実行してみると、なかなかの高機能である事が判明しました。これを今の自分の技術力を使って改造すれば、それなりのものになるのではないか?当時はクライアントサーバ型のシステムアーキテクチャしか知りませんでしたが、今はWebの技術も多少なりはあるし、この機能をWebサービスとして提供すれば、それなりに自分の技術を世間にアピールできるのではないか?ちょっと夢が膨らみすぎましたが、こつこつとやっていけば、それなりの結果は出ると思ったので、「郵便番号検索サービス構想」を発足してみようと思います。全部は出来ないので、以下の順番で進めて行こうと思います。上位にヒットする郵便番号検索サイトよりも高機能の検索エンジンを構築する。2.郵便番号検索機能をweb上に公開1が達成できたら、レンタルサーバを借りて、Web上にこの機能を公開する。3.Webサービスの提供開始2が出来たらWebサービスとして他のWebアプリからも連携できるようにする。妄想族と化していますが、先ずは検索エンジンの性能向上を目的として、気長にやって行こうと思います。なんてかなり枯れたサービスですが、枯れたものに新たなトレンドをブレンドして、新たなサービスを構想するなんてのも面白いかと思います。具体的な事は何も紹介していませんが、気長に付き合って下さい。知ってると便利googleマップの使い方2googleマップの使い方第2弾です。新たに乗換案内(出発地点を決めてかつそのルートをデフォルトで表示する)画面を表示する方法を見つけましたので紹介したいと思います。前回の記事はこちら:知ってると便利googleマップの使い方ちなみに前回はgoogleマップのURLに「f=d」を付ける事で、以下の様な画面をブラウザ上に表示させることが出来ました。今回は以下のパラメータを付加する事で、ルートを決めた状態で表示させることが出来ます。到着時刻)・ttype=dep:date、timeが出発を示す。ttype=arr:date、timeが到着を示す。10:00にして、乗換案内を表示させるURLは以下のようになります。http://www.google.co.jp/maps?ie=UTF8&f=d&dirflg=r&saddr=%E6%9D%B1%E4%BA%AC%E9%A7%85&daddr=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E8%8A%9D%E5%85%AC%E5%9C%92%EF%BC%94%E4%B8%81%E7%9B%AE2-8%E2%80%8E&ttype=dep&date=11%2F9&time=10:00&z=14※東京タワーは複数の関連施設がヒットしない様に、住所での登録にしました。これを自分のブラウザに地図を貼り付けるとこんな感じになります。乗換案内はこの様な感じになりますが、先日スタートしたルート案内サービスについては、自分が調べた限りまだパラメータが用意されていないようです。ルート案内が出来るようになれば、電車以外で自動車からの案内も出来るようになるので、さらに使い勝手がよくなりますね。便利な世の中になったものです、はい。前回に続き、googleシリーズ第2弾です。今回はgoogleマップについて、紹介します。googleマップは、最近ではカーナビとの連動サービスもスタートするなど、飛躍的に進化を遂げているツールです。@IT※過去のgoogleシリーズを見たい方はこちら:こちら1.自分のサイトに地図を貼り付ける方法これは簡単、googleマップを開いて右端にある「リンク」をクリックすれば、htmlのコードが表示されるので、下段のhtmlをコピーして自分のソースに貼り付ければOK。試しに「東京タワー」を検索してその結果の地図を、自分のサイトに貼り付けようとする時の手順はこんな感じです。これを自分のwebサイトのhtmlに貼り付けると、こんな感じになります。この様なやり方だと、東京タワー以外の施設も同時に検索されてしまいます。複数ヒットしてしまっては、見る側も分かりません。そこで名称ではなく、住所で検索してみます。4丁目2-8」を入力して検索を行なうと、マークは1つに絞られますが、今度は「東京タワー」の文字が表示されなくなってしまい、ぱっと見た感じではどこの施設を示しているのかがわかりません。(東京タワー)」と入力すると、名称と住所が自動的に噴出しに表示されて見やすい感じになります。※施設名を()で囲むのが重要です。()で囲むと、それが噴出しの名称になります。これで地図上にピンポイントで施設を表示させる事が出来ます。ポイントも絞られて、しかも吹き出しまで出るので、見る側としてはとても見やすいサイトになります。上記で紹介した以外でURLのパラメータを変更する事で、色々カスタマイズ可能です。カスタマイズ可能なパラメータの代表的なものをいくつか紹介します。・hl:hl=jaと指定すると、日本語で表示されます。ちなみに英語は「en」です。・q:q=(地名、住所などのキーワード)を指定すると、キーワード検索した状態と同じ結果になります。1で紹介したケースです。このパラーメータはURLエンコードで入力する必要があります。URLエンコードは以下のスクリプトを、ブラウザのアドレス欄に貼り付ければ表示されます。[javascript]javascript:void(prompt(”,encodeURI("東京タワー")));[/javascript]※ただしこのjavascriptは指定した文字をUTF-8に変換した後に、URLエンコードされます。・f:f=dと指定すると、ルート・乗換案内が画面左側に表示されます。見る側にとっては、地図とルート・乗換案内が同じ画面で出来るので非常に便利です。http://maps.google.co.jp/maps?f=d&hl=ja&q=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E8%8A%9D%E5%85%AC%E5%9C%92%EF%BC%94%E4%B8%81%E7%9B%AE2-8+(%E6%9D%B1%E4%BA%AC%E3%82%BF%E3%83%AF%E3%83%BC)&iwloc=addrただし、自分のサイトに地図を貼り付けた場合は機能しません。・ll:ll=(緯度),(経度)を指定する事で、その地点の地図を表示する事が出来ます。http://maps.google.co.jp/maps?ll=35.658634,139.745411&hl=ja&q=(%E6%9D%B1%E4%BA%AC%E3%82%BF%E3%83%AF%E3%83%BC)緯度、経度はこちらのサイトから検索する事が出来ます。gecoding※webAPIも提供されているので、手作業で探す手間が省けます。住所が無い場合はどうするかって?1で紹介した様なやり方は出来ないですし、gecodingを使っても緯度、経度も調べる事は出来ません。その様な場合は、googleマップ上で目的の地点まで地図を移動させて、ブラウザのアドレス欄に以下のコードを入力すれば、現在地の緯度、経度を表示する事が出来ます。[javascript]javascript:void(prompt(”,gApplication.getMap().getCenter()));[/javascript]・z:z=(0~20)と指定する事で、デフォルトのズームを指定する事が出来ます。指定できる範囲は0(広域)~20(狭域)になります。地域によって20を指定しても見れない場合があります。知ってると便利google検索のこんな機能googleといえば、言わずと知れた世界最高の検索エンジンです。インターネットやる時は先ずgoogleにアクセスして、そこからフリーワード検索といった感じで、インターネットを利用する人も多いでしょう。「ググる」なんて用語もある様に、いまやgoogleは自分の好きなホームページを探す為の重要なツールとなっているのです。そこで今回はgoogleの一歩進んだフリーワード検索のテクニックを紹介します。これを知っていれば、より自分の探したいサイトを見つける事が出来るかもしれません。apple社のパソコンについて色々調べたいと思い、「マック」とキーワードを入力して「ググる」と、ハンバーガーに関するコンテンツがヒットしてしまいます。キーワードの頭にマイナス「-」を付けると、そのキーワードに関連するページは除外されます。-ハンバーガー」と入力すると、「ハンバーガー」を含むコンテンツは除外されます。普通コンテンツの絞込みを行う場合は、キーワードを増やしていって絞り込むのが普通ですが、この様に「-」を付けた絞込みも時には役立つかもしれません。・公官庁のHPに限定して検索をしたい公官庁のHPから確実な情報を知りたいけど、普通に「ググる」と公官庁以外のサイトもヒットしてしまう。言っても公官庁のHPは分かりづらい、またどこの公官庁のHPを見ればよいか分からない、そんなケースがあったとします。そのような場合は、キーワードの中に、「site:go.jp」と入力すると、公官庁のページに限定して検索されます。site:go.jp」といった感じです。site:http://www.rakuten.co.jp/」を入れると、楽天に行かなくても楽天のコンテンツだけが表示されます。これなら楽天で検索したほうが分かりやすい、という意見もありますが、いくらでも応用はあるので、逆になんかよい使い方があったら教えてください。・テンプレートを検索したい例えば、自分で請求書を書く事になったけど、最初から作るのは面倒くさいから、なんかいいテンプレートをググりたい場合があったとします。テンプレート」といったキーワードを入力して探すものですが、これだとテンプレート以外のサイトもヒットしてしまいます。filetype:xls」と指定してググると、ナント「請求書」という文言を含むExcelファイルだけが検索されます。これなら、今まで時間をかけて探していたものがずっと速く見つけることが出来るのではないでしょうか?3.上級編(調査中です)すばらしい機能が見つかるか、もしくはgoogleが新たに開発してくれれば、また掲載したいと思います。今回は3つの機能を紹介しましたが、これらの機能を使えば、よりgoogleを有意義に使うことが出来るのではないでしょうか?百聞は一見にしかず、ぜひ皆さんも試してくださいね。