住所文字列(位置表現)を含むテキストを入力すると、位置表現を抽出してそのテキストの主題位置に絞り込んだ結果を緯度経度情報付きでJSON形式で応答するAPIです。
住所やスポット名の文字列を単純にすべてピックアップするものではなく、テキストの主題との関連の強さを判断し、関連の強いものだけを抽出します。
[単純に文字列をピックアップする場合の問題点]
(1)同じ地名、スポット名に複数の候補がある
たとえば、「清水寺」に緯度経度を振ろうとすると非常にたくさんの候補があります。(日本には「清水寺」というお寺がたくさんあるため(「清水寺」でジオコードした結果))
このAPIでは京都が話題の中心の場合は京都の清水寺の位置だけを返します。
(2)地名、スポット名でないものを間違えてピックアップする
「福井」さんが京都に旅行に行ったという風な話題の時に「福井」を地名として取ってしまっては困ります。このAPIではこのような地名との取り違えといった問題が起こりにくくなっています。
http://api.locosticker.jp/v1/extract_place/
| パラメータ | 説明 |
|---|---|
| text | 入力文字列(UTF-8) |
| selection | 半角アルファベットで "off" を指定すると絞り込み処理を実行せずに抽出した地名をすべて応答する。指定しない場合、または "off" 以外のものを指定した場合には通常通り絞り込み処理を実行する。 |
| callback(オプション) | JSONP形式で結果を返す場合のコールバックの名前 |
{
"result_select":[
//絞り込み結果
//クラスタ(緯度経度情報の配列)の配列
//selection=off を指定した場合にはクラスタ1にすべての情報が含まれる
[
// クラスタ1
// 緯度経度情報の配列
{"text":"住所文字列",
"lat":経度1(世界測地系・小数点表記: (例)135.527859)",
"lng":緯度1(世界測地系・小数点表記: (例)34.685452)",
"type": "address" または "spot",
"weight": 重要度},
:
],
[
//クラスタ2
],
[],...
],
}
text として「東京から名古屋駅を通過して大阪駅に行きました。大阪市中央区本町に到着しました」を指定した場合。
{ result_select:
[
[
{text:大阪市中央区本町, lat:34.683764, lng:135.509592, type:address, weight:2},
{text:大阪駅, lat:34.702499, lng:135.494982, type:spot, weight:1.5}
]
]
}
本APIは locosticker.jp の提供するGeocodeAPIを使用しています。







コメント (3)
PHPで位置表現特定APIを使用し、次のように書きましたが、
結果は、string(20) "{"result_select":[]}"となり、
何も得られません。
どこか間違っていますでしょうか?
//snoopyクラスのインクルード
include "snoopy.php";
//snoopyオブジェクトの生成とプロキシ設定
$snoopy=new Snoopy();
$snoopy->_isproxy = true;
$snoopy->proxy_host = "***.***.***.jp";
$snoopy->proxy_port = "*****";
//場所のサンプルをUTF-8に変換
$tT="名古屋市中区栄1丁目でイベントします。";
//文字コードの変換
$encode = mb_detect_encoding ( $tT, "ISO-8859-1, UTF-8, SJIS, EUC-JP" );
$tT = mb_convert_encoding ( $tT, "UTF-8", $encode );
//パラメータ設定と呼び出し
$postArray = array();
$postArray['text']= urlencode($tT);
$snoopy->submit("http://okilab.jp/project/location/api/v1/extract_place/",$postArray);
//別のやり方でやってみる
$proxy_server = "***.***.***.jp";
$proxy_port = ***;
//fsockopenを使いサーバに接続
$fp = fsockopen ($proxy_server,$proxy_port);
if ( !$fp ) {
echo ( "ERROR:".$proxy_server."に接続できませんでした" );
exit();
}
//HTTPのリクエスト・メッセージ
$url="http://okilab.jp/project/location/api/v1/extract_place/?text=";
$request = "GET ".$url.$postArray['text']."&callback=\"\" HTTP/1.0\n"; //GET
$request .= "Host: ".$proxy_server."\n"; //Host:
$request .= "User-Agent: Spider/1.0\n"; //User-Agent:
$request .= "\n";
fputs ( $fp, $request ); //リクエスト送信
while ( !feof ( $fp ) ) {
$html .= fgets ( $fp, 4096 );
}
fclose ( $fp );
//結果を出力
var_dump($result);
echo $html . "\n";
投稿者: Akira Tanaka | 2008年06月14日 10:44
お返事遅くなってすみません。
PHPは良く分からないのですが、文字コードの変換の辺りが悪いみたいです。
"名古屋市中区栄1丁目でイベントします。"をURLエンコードした結果である$postArray['text'] を echo で出力してみると
%C3%8C%C2%BE%C2%B8%C3%85%C2%B2%C2%B0%C2%BB%C3%94%C3%83%C3%A6%C2%B6%C3%A8%C2%B1%C3%89%C2%A3%C2%B1%C3%83%C3%BA%C3%8C%C3%9C%C2%A4%C3%87%C2%A5%C2%A4%C2%A5%C3%99%C2%A5%C3%B3%C2%A5%C3%88%C2%A4%C2%B7%C2%A4%C3%9E%C2%A4%C2%B9%C2%A1%C2%A3
となりました。(手元のEUC-JPな環境です)
UTF-8をURLエンコードすると
%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%B8%82%E4%B8%AD%E5%8C%BA%E6%A0%84%EF%BC%91%E4%B8%81%E7%9B%AE%E3%81%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
となるはずです。
とりあえず、
$tT = mb_convert_encoding ( $tT, "UTF-8", "EUC-JP" );
と決め打ちで書き換えてみたら
({"result_select":[[{"text":"名古屋市中区栄1","lat":"35.166841","weight":2,"type":"address","lng":"136.892241"}]]})
という結果が返るようになりました。
ご参考になれば。
投稿者: tfukui | 2008年06月16日 11:08
安全安心メール
http://anzen.m47.jp/
を制作しました。
ここで本サービスを利用させて頂いています。
http://anzen.m47.jp/mail-294.html
メールだけでは場所がピンと来ない場合が多かったので。
ありがとうございます!
投稿者: 安全安心メールポータル | 2008年06月16日 17:13