Yahoo!ローカルサーチAPIで、ジオコーディング
February 27, 2007 5:01 PM by funami
ローカルサーチWebサービスがリリースされました。ローカルサーチという名称なので、何ができるのか、ピンとこなかったのですが、実は、高性能のジオコーダーなのでした。
駅名検索、ランドマーク、住所、郵便番号での検索もでき、部分一致で複数戻してくれます。そして、もうひとつ、クーポン検索機能もあります。
特定の位置から、距離順に検索をすることも可能です。
しかも、結果には、世界座標系と、日本座標系の両方が含まれるのです。
これまでのGoogleジオコーダーや、シンプルジオコーディング実験とあわせて、かなり、国内も充実してきたと思います。
ローカルサーチAPIを試せる、簡単なページ作ってみました。
サンプルでは、PlaceEngineも使って、ちょこっと、マッシュアップしています。
※IEだと、PlaceEngine起動時にエラーになっています。 IEのかたは、http://tatamilab.jp/~funami/mashup/yahoo/search2をお試しください。
駅名検索がうれしい
ローカルサーチということで、いろいろ、うれしことがあるのですが、個人的には、現在位置を中心として、近隣の駅の緯度経度が取れるのがうれしいです。もともと、駅に関してはシンプルジオコーディング実験のAPIでも取得できたのですが、新線対応がが遅れている場合があるのが、ちょっと気がかりでした。
Yahoo!ローカルサーチの更新頻度がどこまで新鮮かは、確認していませんが、かなり、新鮮な動機を取ってくれることを、期待しています。
GoogleGeocoderとの比較
1.検索カテゴリ
GoogleGeocoder:
検索クエリがひとつだけということで、検索対象のカテゴリを設定することはできません。
Yahoo!ローカルサーチ:
以下の項目別に検索できます。
検索カテゴリ
* Address - 住所
* Zipcode - 郵便番号
* Landmark - 施設
* Station - 駅
* Courpon - Yahoo!クーポン
郵便番号は、GoogleGeocoderでは受け付けてくれなかったので、便利だし、駅と住所を区別できるのは、便利です。
もちろん、区別したくないときもあるのですが、Yahoo!ローカルサーチではデフォルトでaddress、zipcode、landmark、stationを対象に検索してくれます。
とくにしていしなときは、GoogleGeocoderとほぼ同じ機能になりそうです。
2.座標系
GoogleGeocoder
クエリ、レスポンスともに世界座標系のみ
Yahoo!ローカルサーチ:
クエリで日本、世界を選択可能
レスポンスには、日本、世界の両方が返る
3.住所レベル
レスポンスに含まれる、住所が、県レベルなのか?街レベルなのかがこのパラメーターでわかります。
この値を元に地図の縮尺をかえるとか、アイコン(マーカー)の形状をかえるようなことができるようになります。
GoogleGeocoder
1から8まで定義されているのですが、日本の地名は、すべて1のCountryが戻ってくるようです。
アメリカ国内は大丈夫なようです。また、アフリカ、ヨーロッパは国名(例:エジプト)は「0 Unknown」,都市名(例:カイロ)は「1 country」が戻るようです。
アルファベットだとまた結果が変わったりして、ちょっと、使いづらい状況ではあります。
enum GGeoAddressAccuracy
There are no symbolic constants defined for this enumeration.
Constants
Constants Description
0 Unknown location. (Since 2.59)
1 Country level accuracy. (Since 2.59)
2 Region (state, province, prefecture, etc.) level accuracy. (Since 2.59)
3 Sub-region (county, municipality, etc.) level accuracy. (Since 2.59)
4 Town (city, village) level accuracy. (Since 2.59)
5 Post code (zip code) level accuracy. (Since 2.59)
6 Street level accuracy. (Since 2.59)
7 Intersection level accuracy. (Since 2.59)
8 Address level accuracy. (Since 2.59)
Yahoo!ローカルサーチ:
日本国内だけでも、いい感じでならべてくれるので、うれしいです。
しかし問題は、東京都でクエリすると2515937件のレスポンスが返るので、絞り込むのが大変。
そのために、クエリにも住所レベルの絞り込みを渡せるようになっています。
しかし、ここで、ちょっと疑問なんですが、AddressLevel=1の結果を出すのができません
ま、住所レベルの絞込みが市町村が最高なので、都道府県レベルでは出ないということのようです
http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?n=100&al=1&appid=YahooDemo&p=%E9%9D%92%E6%A3%AE
↑例:住所レベル=市町村、名称=青森
Googleのほうは、国内の地名はほぼ、一箇所しか戻してくれないのですが、Yahoo!はあるだけ出してくれるようです。
AddressLevel 住所レベル:
* 0 - 住所以外
* 1 - 都道府県レベル
* 2 - 市区町村レベル
* 3 - 町、大字レベル
* 4 - 丁目、字レベル
* 5 - 番地レベル
* 6 - 号レベル
* 7 - その他1
* 8 - その他2
4.対象エリア
GoogleGeocoder
きちんと仕様で確認できていないのですが、日本語でのサーチだと、国内および、世界各国の国名、主要都市名、観光地(感覚地)
Yahoo!ローカルサーチ
これは日本にみかな?地図がそうなので、予想ですが...
ジオコーダー充実ということで
マッシュアップとしては、今飲んでいる、お店から、駅までの間でのお店候補を、ホットペッパーWebサービスを掛け合わせてみるなんていう使い方もできると思います。
マッシュアップアワードのねたとして、ぜひご活用ください。
サンプルソース
今回はRuby on Rilesで作っています。
ソース一式
展開後、各ファイルを、controller,views,publicに振り分けてください。
スタイルシートは、Web20テーマを使わせていただいています
コントローラは以下の様になっています。
・yahoo_controller.rb
class YahooController < ApplicationController
require 'net/http'
require 'rexml/document'
API_KEY = 'ここにAPIKEYを入れてください'
def search_station
xml = get_xml(params)
@doc = REXML::Document.new(xml).elements['LocalSearchResult']
@count = @doc.elements['Count'].text.to_i
render :layout=>false
end
def search
xml = get_xml(params)
if params['type'] == 'xml'
@headers['Content-Type'] = 'text/xml; charset=utf-8'
render :text=>xml;
else
doc = REXML::Document.new(xml).elements['LocalSearchResult']
end
end
:private
def get_xml(params)
@query_url = make_url(params)
res = Net::HTTP.get_response(URI.parse(@query_url))
xml = res.body
end
def make_url(params)
param_array = []
params.each do |key,value|
unless value.to_s.empty?
param_array << "#{key}=#{CGI.escape(value)}"
end
end
param_str = param_array.join('&')
return "http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=#{API_KEY}&#{param_str}"
end
def api_key
return API_KEY
end
end
関連リンク
・
Yahoo!地図情報WebサービスとGoogleMapsAPIを比べてみる
・
Yahoo!地図情報Webサービスついに公開
・YahooからREST形式でのジオコーダAPI
tags:Mashup PlaceEngine Yahoo!地図情報


COMMENTS
ソースが落ちてきません
December 24, 2007 2:29 PM by 774どうも、すみませんでした。
RailsをWebRickで動かしていたのですが、プロセスごと落ちてました。
ソースの部分に関しては、
http://tatamilab.jp/~funami/blog/sample.lzh
よりダウンロードいただけます。
ただし、サービスのほうは見れなくなっています。
December 26, 2007 8:40 PM by フナミタカオありがとうございます
December 27, 2007 1:42 PM by 774