ホーム > タグ > geocoding

geocoding

住所から緯度経度を取得するAPI(Rhacoネタ)

仕事で使った書き捨てプログラムだけど、公開。

住所から緯度経度を取得するAPIといえばGeocoding APIが有名です。
単純な(量の少ない)住所=>緯度経度取得ならAPIを公開していただいているのでそれを使ってサクッとつくれます。
しかし、大量のリクエストを投げると「ちょwww」となって、APIが停止してしまいます。
最初に200件ほどの住所を投げたら止まってしまいました>Geocoding APIの中の人、ごめんなさい。

本家のgoogle様で既にgeocodingのAPIを公開してるんですね。
これとrhacoを使って、geocodingAPIクラスを作ってみました。

<?php
Rhaco::import("network.http.ServiceRestAPIBase");

class geocodingAPI extends ServiceRestAPIBase{
	var $url = "http://maps.google.co.jp/maps/geo";
	var $key;
	function geocodingAPI($key){
		parent::ServiceRestAPIBase();
		$this->key = $key;
	}
	function search($keyword){
		$hash = array("q"=>$keyword,"output" => "xml","ie"=>"UTF8");

		$pTag = new SimpleTag();
		if($pTag->set($this->get($hash),'Response')){
			//L::debug($pTag);
				
			if($pTag->getInValue('code')== '200'){
				foreach($pTag->getIn('coordinates') as $item){
					$list = $item->toHash();
					return $list;
				}
			}
		}
		return false;
	}
	function buildUrl($hash){
		return parent::buildUrl($hash,array("key"=>$this->key));
	}
}

?>

rhacoにはwebサービス(urlにリクエスト投げたらxmlで返ってくる、みたいな)を簡単に実装できる機能(クラス?)があります。
で、このクラスを実行するのはこんな感じ。

<?php
include_once("__init__.php");
Rhaco::import("geocodingAPI");

$geo = new geocodingAPI("ここにgooglemapのapikeyを取得して書く");
print_r($geo->search("東京都 千代田区千代田"));
?>

おもいっきり車輪の再開発だし、しょっぱいプログラムだけど、これを作ることが出来てすっごい助かりました。
これがなければ住所データをgoogleマップに貼付けて緯度経度をひたすらコピペする簡単なお仕事をするはめになったから。
ほんと、rhacoに感謝です。

Home > Tags > geocoding

Search
Feeds
Meta

Return to page top