メイン

位置情報 アーカイブ

2009年08月12日

FOMA(F904i)を使ってマカオでGPS測位できるか試してみました。

 FOMA(F904i)を使ってマカオでGPS測位できるか試してみました。

 昨年の夏季休暇ではベトナムとタイとで、FOMA(F904i)のGPS機能を使って測位を試してみたもののの、残念ながら失敗しました。しかしヨーロッパで成功したとの情報もあることから、条件のひとつとしてその国が3Gに対応していることが必要?(あるいは携帯側がGSMに対応していることが必要)と推測するも今まで検証できませんでした。 しかし、今年の夏季休暇にマカオに旅行。マカオは3G対応国ですので、同じ携帯を使って再チャレンジしました。

 マカオに到着後、携帯をON。アンテナマークが表示されるとともに、現地と日本時間の両方が表示されました。携帯端末が現在マカオ(or 時差-1時間の海外)にいることを認識してしているようす。

mobgps01.jpg

場所は「マカオフェリーターミナル」前、早速GPS測位開始…前回同様待たされます…数分後…測定失敗。マカオもダメか…。

 気を取りなおして、観光開始。まずは定番の「媽閣廟」に。念のため再度GPS測位開始…やはり待たされます…数分後…結果がでました!ついに成功。

mobgps02.jpg


 この後更に、「カジノ・リスボア」、「セナド広場」で試すも失敗、しかし「聖ポール天主堂跡」では成功。

mobgps03.jpg

 測位開始前に「海外では成功率が低い、時間がかかる」といった感じの注意書きが出るのですが、その注意書きが示すとおり、時間がかかり、また失敗も多いものの、全く測位できなかった、ベトナムやタイとは異なり、場所によっては測位することができました。

 このことから、最初の推測どおり、現状、単独測位方式可能とあるFOMA携帯でも、その携帯端末がどの国にいるか(or 時差)を基地局から一度は受信しないと、その国では測位できないのかもしれません。とはいえ、今回の実験だけで結論づけるのは危険。さらに検証が必要なのですが、時間とお金が...

P.S.
今回の測定結果を Google マイマップでも書いてみました。興味のある方はご覧ください。
http://maps.google.com/maps/ms?ie=UTF&msa=0&msid=109967891835125648604.000470e9ae8ddf016b345

2009年06月22日

京都の通り名に対応したLocoStickerをリリース

6月11日、ロケージングさんとANNAIさんが共同開発された「ジオどす」を導入し、京都の通り名に対応したLocoStickerをリリースしました。

 従来の国内住所、スポット名、海外カタカナ地名に加えて、「四条烏丸上る」などの通り名に対応します。これにより、京都で一般的に使われている通り名を含むコンテンツについても、位置情報タグを付与できるようになりました。

 リリース内容はこちらをご覧下さい。

OKIとロケージング・ANNAI、業界初、京都の通り名に対応した位置表現抽出・管理サービスを提供開始 

2009年06月01日

Yahoo! Placemaker を試してみた

先日ベータ版がリリースされたPlacemakerを試してみました。LocoStickerを作っている者としては非常に気になるサービスです。

Yahoo.com の ID は持っていたので、App ID さえ取ってしまえば Placemaker の利用そのものは非常に簡単でした。APIドキュメントを読んで必要なパラメータを POST するだけです。(この記事の最後にお試し用のフォームを置いてあります)

最低以下の4つを指定すれば日本語の文章からも地名抽出してくれます。

appId=hogehoge
inputLanguage=ja-JP
documentType=text/plain
documentContent=清水寺を観光した
documentContent の 代わりに documentURL を指定すればウェブ上のコンテンツを対象とさせることもできます。

清水寺は日本中にたくさんあるという話はLocoStickerを説明する際にも良く使う例なんですが、「清水寺を観光した」をPlacemakerに掛けると、京都の清水寺が選ばれます。これは同じ表現で複数の場所の候補がある場合には1つに絞るモードがデフォルトになっているからで、autoDisambiguate=false を指定すればすべての「清水寺」の場所が返ってきます。各候補は confidence という項目を持っており、autoDisambiguate=true の場合には conficence が最大の候補が選ばれるようです。いろいろ試した限りではこの confidence は静的な値のようで、抽出対象となる文章内の地名間の位置関係は autoDisambiguate のロジックでは使われていないみたいです。この点は LocoSticker と Placemaker の違いを特徴付ける大きな要素と言えそうです。

たとえば「明石市の清水寺」の場合、LocoSticker では「明石市」と「清水寺(明石市のもの)」が選ばれますが、Placemaker では「明石市」と「清水寺(京都市のもの)」が選ばれました。 ただし、Placemaker では、フォーカスする場所のヒントを focusWoeId というパラメータで与えることができます(API ドキュメントでは focusWoeid となっていますが、フォーラムの記事によれば i は大文字じゃないと正しく動作しないそうです)。ただ、focusWoeId として「明石市」の WOEID である 1116946 を指定しても「清水寺」は相変わらず京都のままでした。フォーラムで上げられている "Arlington" の例ではうまく行くので、うまく行く場合とうまく行かない場合とがあるみたいです。何に起因しているのかはもうちょっと試してみないと分かりません。

それと、日本語の地名に関して、住所表記については町名レベルまで抽出してくれるようです。例えば「大阪市中央区本町2-5-7」と入力すると「大阪市中央区本町」が返ってきます。(LocoStickerは番地レベルまでです。この例だと「大阪市中央区本町2-5」が返ります。)

ともあれ、まだベータ版でありますし、この先が楽しみでもあり怖くもあるサービスです。

content:
docType:
language:
autoDisambiguate:
focus WOEID:

2009年03月27日

LocoStickerキーワード分布データ検索APIを公開しました。

キーワードの分布地図データを取得するAPIを、LocoStickerが提供する機能の一つとして公開しました。本APIはリクエストしたキーワードがどのような地域と関連があるのかを、キーワードが関連する「緯度経度」とその「関連性の強さ」の組のリストとして応答します。詳しくはLocoStickerキーワード分布データ検索APIをご覧下さい。

LocoStickerキーワード分布データ検索APIを利用して、キーワードがどのような地域と関連が深いのかを、地図上に分布図として表示するデモLocoSticker ヒートマップを作成しました。テキストボックスに興味のあるキーワードを入力して、「分布を見る」ボタンを押して下さい。テキストボックスに入力したキーワードに関連する地域を、地図上で赤く強調して表示します。色の濃い地域ほど入力したキーワードと強い関連性を持っています。

是非お試し下さい。

heatmap-udon.png
「うどん」のヒートマップ

2009年03月25日

「世界の地図」コンテンツサービスがリリースされました。

2009年3月24日。LocoStickerのコンテンツ検索APIを利用した、地球の歩き方T&Eさん「世界の地図」コンテンツサービスがリリースされました。リリース原稿はこちら

「世界の地図」コンテンツサービスでは、特派員のブログや、掲示板への投稿記事などから、海外のカタカナ地名を自動抽出して緯度経度を与え、地図からこれらのCGMコンテンツを検索できるようにしています。また、観光スポット情報やホテル情報もまとめて管理することで、必要な情報だけを選択した上で、重ね合わせて表示することもできます。

海外旅行の計画を地図上で考えることができそうです。是非、おためしください。

2009年02月26日

I tried to add GIS functions (distance_sphere and distance_spheroid) as native functions for MySQL.

I tried to add GIS functions (distance_sphere and distance_spheroid) as native functions for MySQL.
(source & patch: mysql-native-distance_spheroid-1.0.tar.gz)

I had already released the functions as UDF.
(see http://okilab.jp/blog/2008/07/distance_sphere_distance_spher.html)

"distance_sphere()" returns linear distance in meters between two lat/lon points. Uses a spherical earth and radius of 6370986 meters.
"distance_spheroid()" returns linear distance between two lat/lon points given a particular spheroid.

BUILDING
------------------------
1) Put the sources (item_sphr_geofunc.h, item_sphr_geofunc.cc, calc_distance_spheroid.h calc_distance_spheroid.cc) into mysql-5.1.*-beta-GIS/sql directory.

2) To add new native functions, edit 4 files (Makefile.in, item.h, item_func.h item_create.cc) in mysql-5.1.*-beta-GIS/sql.

I made patches for 'mysql-5.1.23-beta-GIS' that is released on http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/. Please use or refer to the patches.
(e.g)
patch Makefile.in < Makefile.in.patch
patch item.h < item.h.patch
patch item_create.cc < item_create.cc.patch
patch item_func.h < item_func.h.patch

3) Make as usual.
(e.g)
./configure
./make
./make install

USING
------------------------
(e.g.)

mysql> SELECT distance_sphere(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326)) AS dist;

mysql> SELECT distance_spheroid(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') AS dist;


MySQLへGIS関数(distance_sphere と distance_spheroid)をネィティブ関数として追加してみました。
(ソースとパッチ: mysql-native-distance_spheroid-1.0.tar.gz)

この関数はUDFとして既に公開済みのものです。
(mysql-native-distance_spheroid-1.0.tar.gzを見て下さい。)

distance_sphere(point, point)
 2つの緯度経度を結ぶ直線距離をメートルで返します。地球を半径6,370,986mの球形として計算します。
distance_spheroid(point, point, spheroid)
 回転楕円体を指定して2つの緯度経度を結ぶ直線距離を計算します。現在、点間のみが実装されています。

ビルド
------------------------
1) ソース(item_sphr_geofunc.h, item_sphr_geofunc.cc, calc_distance_spheroid.h calc_distance_spheroid.cc)を mysql-5.1.*-beta-GIS/sql ディレクトリに置きます。

2) ネィティブ関数として追加するために、mysql-5.1.*-beta-GIS/sql にある4つのファイル(Makefile.in, item.h, item_func.h item_create.cc)を編集します。

 http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/. にある mysql-5.1.23-beta-GIS へのパッチファイルを作成しました。これを使い、あるいは参照してください。
 (例)
patch Makefile.in < Makefile.in.patch
patch item.h < item.h.patch
patch item_create.cc < item_create.cc.patch
patch item_func.h < item_func.h.patch

3) いつものようにメイクしてください。
 (例)
./configure
./make
./make install

使用方法
------------------------
 (例)
mysql> SELECT distance_sphere(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326)) AS dist;

mysql> SELECT distance_spheroid(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') AS dist;

2009年01月06日

あけましておめでとうございます

 あけましておめでとうございます。

 昨年中は、各所で位置表現抽出・管理サービスLocoStickerをご愛顧いただきありがとうございました。

 今年も、位置情報に関する様々なアイデアを形にしていきたいと、チームメンバー一同はりきっていますので、どうぞよろしくお願いします。

2008年11月25日

DGRadar に近くのブログ記事を表示させる

ちょっと遅くなりましたが、ジオメディアサミット関西で教えて貰ったネタを。

DGRadar という iPhone 用のアプリがあります。現在位置の周辺の様々な情報をレーダー風の画面に表示してくれる、非常に面白いユーザインタフェースのアプリケーションです。

あらかじめ用意されている情報チャンネルとして、レストラン、ホテル、ランドマーク、写真などがありますが、カスタムチャンネルとして位置情報を返すウェブAPIを呼び出すように自分で設定することもできます。ジオメディアサミット関西では LocoSticker の位置情報付きコンテンツ検索 API を呼び出してブログ記事をレーダーに表示させているところを見せてもらったので、自分でもやってみました。(実はそれまでカスタムチャンネルを自分で設定できることを知らなかった)

まずは"Channel"の画面で「編集」ボタンを押します。
dgradar1.jpg

"Custom"の一番下に"Add New Channel"が出てくるのでそれを選択します。
dgradar2.jpg

以下のように各項目を設定します。設定内容の意味についてはLocoSticker 位置情報付きコンテンツ検索APIのドキュメントを参照してください。

Base URL は http://api.locosticker.jp/v1/search_contents/ です。
dgradar3.jpg dgradar4.jpg dgradar5.jpg

以下は、職場の近くについて書かれたブログ記事を表示させたところです。
dgradar8.jpg dgradar6.jpg dgradar7.jpg

2008年11月20日

How to build "distance_sphere(), distance_spheroid() for MySQL" on Windows.

I tried to build "distance_sphere(), distance_spheroid() for MySQL" on Windows.
I used "Visual Studio 2008 C++ Express Edition", but it is not the only way.
I have little experience of developing software on Windows.
I request your comment.

You needs MySQL source files to build the UDF.
However you can use MySQL that installed with binary package (mysql-5.1.23-beta-GIS-GIS-win32.zip).

Notice: I used Japanese edition, therefore descriptions of operating is not precise.

* Prepare environment.
Visual Studio 2008 C++ (You can use "Express Edition")
CMake (http://www.cmake.org/)

* Download "mysql-5.1.23-beta-GIS.zip" and unzip into your_working_directory.
(http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/)

* Create "win\build-vs9.bat" (copy from "win\build-vs8.bat" and edit 3 lines)

copy win\vs8cache.txt cmakecache.txt → copy win\vs9cache.txt cmakecache.txt
cmake -G "Visual Studio 8 2005" → cmake -G "Visual Studio 9 2008"
copy cmakecache.txt win\vs8cache.txt → copy cmakecache.txt win\vs9cache.txt

* Modify "sql\CMakeLists.txt"
+ Change
ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN)

ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN -D_USE_MATH_DEFINES)

+ Add following 3 lines at tail

ADD_LIBRARY(udf_distance_spheroid MODULE udf_distance_spheroid.cc udf_distance_spheroid.def calc_distance_spheroid.cc spatial.cc)
ADD_DEPENDENCIES(udf_distance_spheroid strings)
TARGET_LINK_LIBRARIES(udf_distance_spheroid strings)

* Copy the source code of the UDF(mysql-udf-distance_spheroid-1.0.tar.gz) into sql\ directory.
calc_distance_spheroid.cc
calc_distance_spheroid.h
udf_distance_spheroid.cc

* Create "udf_distance_spheroid.def" into sql\ directory.

LIBRARY udf_distance_spheroid
VERSION 1.0
EXPORTS
distance_spheroid
distance_spheroid_init
distance_spheroid_deinit
distance_sphere
distance_sphere_init
distance_sphere_deinit

* Put commands on windows command prompt

cd your_working_directory.
win\configure
win\build-vs9.bat

* Open "MySql.sln" with VC++
* Change "Active Solution" to "Release" in "Build" > "Manager" menu.
* Add "/FORCE:UNRESOLVED" into "Build" > "Linker" > "Command Line" about propety of udf_distance_spheroid
* Build "udf_distance_spheroid"
* Build "udf_distance_spheroid" again

* Copy "udf_distance_spheroid.dll" created in "sql\Release" into your "lib" directory in your MySQL install directory.
(e.g.: C:\Program Files\MySQL\MySQL Server 5.1\lib)

* Test

CREATE FUNCTION distance_sphere RETURNS REAL SONAME "udf_distance_spheroid.dll";
CREATE FUNCTION distance_spheroid RETURNS REAL SONAME "udf_distance_spheroid.dll";
SELECT distance_sphere(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326)) AS dist;
SELECT distance_spheroid(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') AS dist;

Please refer sample files if you want.


"distance_sphere(), distance_spheroid() for MySQL" を Windows で使用するにはどうすればいいかという質問がありましたので、Visual Studio 2008 C++ Express Edition を使って作ってみました(他でも可能だと思いますが試していません)。
dll を作るのにMySQLのソースが必要になりますが、MySQL本体はバイナリイメージからインストールしたもので利用可能です。
Windows上の開発は慣れていないので、いろいろ、おかしなことをやっているかもしれません。お気づきの点がございましたら、コメントよろしくお願いします。


構築環境

Visual Studio 2008 C++(Express Editionも可)
CMake (http://www.cmake.org/)

mysql-5.1.23-beta-GIS.zipをダウンロードし作業ディレクトリに解凍する。
(http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/)

win\build-vs9.bat を作成する。win\build-vs8.bat をコピーし、以下の3行を修正する。

copy win\vs8cache.txt cmakecache.txt → copy win\vs9cache.txt cmakecache.txt
cmake -G "Visual Studio 8 2005" → cmake -G "Visual Studio 9 2008"
copy cmakecache.txt win\vs8cache.txt → copy cmakecache.txt win\vs9cache.txt

sql\CMakeLists.txt を修正
ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN)

ADD_DEFINITIONS(-DMYSQL_SERVER -D_CONSOLE -DHAVE_DLOPEN -D_USE_MATH_DEFINES)

最後に以下の2行を追加

ADD_LIBRARY(udf_distance_spheroid MODULE udf_distance_spheroid.cc udf_distance_spheroid.def calc_distance_spheroid.cc spatial.cc)
ADD_DEPENDENCIES(udf_distance_spheroid strings)
TARGET_LINK_LIBRARIES(udf_distance_spheroid strings)

sql\に以下のファイルをコピー
calc_distance_spheroid.cc
calc_distance_spheroid.h
udf_distance_spheroid.cc

sql\に"udf_distance_spheroid.def"を作成

LIBRARY udf_distance_spheroid
VERSION 1.0
EXPORTS
distance_spheroid
distance_spheroid_init
distance_spheroid_deinit
distance_sphere
distance_sphere_init
distance_sphere_deinit

コマンドプロンプトで

cd 作業ディレクトリ
win\configure
win\build-vs9.bat

MySql.sln が作成されるので、これをVC++でオープン
ビルド>構成マネージャ>アクティブソリューションを Release に変更
udf_distance_spheroid のプロパティ ビルド>リンカ>コマンドライン に
/FORCE:UNRESOLVED
を追加

udf_distance_spheroid をビルド
その状態で再度ビルド

sql\Release に作成された udf_distance_spheroid.dll を MySQL本体をインストールしフォルダの lib ディレクトリ
(例:C:\Program Files\MySQL\MySQL Server 5.1\lib) にコピーする。

テスト

CREATE FUNCTION distance_sphere RETURNS REAL SONAME "udf_distance_spheroid.dll";
CREATE FUNCTION distance_spheroid RETURNS REAL SONAME "udf_distance_spheroid.dll";
SELECT distance_sphere(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326)) AS dist;
SELECT distance_spheroid(GEOMFROMTEXT('POINT(136 36)',4326),GEOMFROMTEXT('POINT(135 35)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') AS dist;

参考にサンプルをおいておきますので、必要に応じてご参照ください。

2008年11月10日

FOSS4G 2008 Osaka で発表しました。

まずはスタッフおよび参加者の皆様、お疲れ様でした。okumula こと、奥村です。

参加は初めてにも関わらず「MySQLへの地理空間距離関数の追加」というタイトルで、
発表までさせていただき、ありがとうございました。

ちなみに発表した内容は、このサイトで公開している distance_sphere() を例に、
MySQL にジオな関数をUDFとして追加する手順等についてです。
実はタイトルと共に申し込んでから、書くことを考えていったので、
タイトルと内容が少しずれてしまったかもしれません。

私の発表を聞いてくださった方には、言わずともバレバレかと思いますが、
壇上では見事にあがってしまいました。うまく標準語で話せてたでしょうか?(笑)
もし分かりずらい点や質問などがございましたら、いつでも遠慮なくご質問ください。

ジオコミュニティの皆様、新参者ではありあますが、これからもよろしくお願いします。

続きを読む "FOSS4G 2008 Osaka で発表しました。" »

2008年11月09日

第1回ジオメディアサミット関西に参加

2008年11月8日10:00-12:00。FOSS4G Osaka内のミニイベントとして行われた、第1回ジオメディアサミット関西に参加しました。ジオメディアサミットは過去2回東京で開催されていましたが、毎回ものすごく盛り上がるため、なんとかこの熱いものを関西へということで、今回初上陸でした。

講演内容は以下のとおり。簡単な紹介と簡単に感想を・・・。

・「IP Geolocationとその活用事例」・・・サーバエリアリサーチ 中西健様
ユーザの利用者からのアクセスログに含まれるIPアドレスから、その利用者がどこからアクセスしているかを判定する技術を元に、ローカル広告の配信制御や、コンテンツの配信制御、さらにはネット購買におけるセキュリティチェックなどへの適用など幅広い分野で利用されている。
ほぼ日本全国のIPアドレスを管理できているという網羅性がすごい。条件が整えば、市町村レベルまで特定できるとのこと。

・「LocoSticker」・・・沖電気工業株式会社 福居毅至
弊社の位置表現特定・管理サービスの紹介と今後の展望について紹介しました。LocoSticker.jpで是非お試しください。

・「Yahoo! JAPANの新サービス LatLongLab」・・・ヤフー株式会社 岩澤直樹様
Yahoo!さんのジオメディアなラボLatLongLabの紹介。バーチャルとリアルを結びつけた「猛レース」は斬新な発想のゲームでした。実際に走っておかないといけないところが、健康にいい。さらに、「4x3印刷」で、悪の秘密結社で使われているような巨大な地図を印刷するツールのご紹介。仮面ライダーのショッカーのアジトを想像したのは、私だけではないでしょう。もうすぐ、さらに新しいものが出てくるらしい・・・。

・「ケータイ国取り合戦」・・・株式会社サイバーマップジャパン 大塚恒平様
日本全国600に区切られた領土に実際に行って、ケータイで「国取りボタン」を押して、天下統一を図るというゲーム。操作は単純なので、気軽に楽しめる。ちょっとした競争心で意外とムキになるかも知れません。既に天下統一をされた方も多く、最近は山手線のいくつかの駅を使ったイベントなども開催されているとのこと。電車の吊広告や、駅の看板など、リアルと連携したジオメディア。

・「位置情報ロカポのご紹介」・・・有限会社ロケージング 上田直生様
緯度:○○度××分□□秒、経度・・・なんていう表記はどうも日常ではなじまない。だから、もっとリズミカルなズンズンチャッ、ズンズンチャッ・・・っていうラップのような位置を特定するコードがあれば・・・で発案されたのが、ロカポ(LocaPoint)。12文字の英英数、英英数、英英数、英英数なので、表記や読み間違いがほとんど起こらないのが特徴。確かにリズミカルなので口ずさんでしまいそう。文字数が少ないのでケータイでのデータ送信にも向いていると思われる。

・「汎用性の高い位置情報Nコード」・・・有限会社NCプロジェクト 西岡徹様
同じく、緯度、経度に代わる位置を特定するコード。全世界メッシュ分割された記号をつかうことで、5m単位での特定ができるとのこと。 例えば、こんな感じ。6A,4288/5110-5609 慣れるまでピンとこないですが、株をする人が証券番号を覚えるように、ブロック番号も慣れると覚えてしまうかも。

・「Navitte!」・・・株式会社 shiganet 志賀雄太様
Googleのストリートビューを活用して、道案内を作ってしまうサービス。有名な店なんだけどどうも行き方が分からなくって・・・・なんていうことがなくなるかも。ストリートビューによる実写に、うまくメッセージを当てはめているので、確かに道案内としては、非常に分かりやすい。

・「AdLocal」・・・株式会社シリウステクノロジーズ 関治之様
緯度経度情報さえ送れば、その周辺にニーズのある広告を自動的に選んで出してくれる。ジオメディアという言葉の発案者でもある関さんからのご紹介でした。位置連動広告は、例えばGPSなどで取得した利用者の位置に関連して出すことが良く行われています。さらには、LocoStickerで位置を自動付与したコンテンツ(ブログなど)に連動させて出すのも有効と考えています。

・「アナタノ地図脳STAMP」・・・マルティスープ株式会社 那須俊宗様
大切な場所や、話題になった場所を自分に代わって覚えておいてくれる。そして、必要なときには簡単に思い出すことができる。こんなストレートなニーズにこたえてくれるサービス。3キャリアの公式サービスとして提供されています。たしかに、直ぐ近くまで行ってるのに、そのときに忘れていて、「そういえばあそこにおいしい魚のお店があったんだよなあ」と後になって思い出すことは、良くある。ただ、最近は思い出せないことも多い ^0^;。

・「カーナビと携帯電話の連携」・・・富士通テン株式会社 沢田輝様
カーナビなので、ECLIPSといったほうが、馴染みがあるかも。最近は、新製品のカーナビより、少し型落ちしたカーナビが、価格メリットで良く売れているらしい。新製品の付加価値が、その価格差に見合わないと市場は見ているそうな。そこで、カーナビ単独ではなく、ケータイと連携させて、プランニング(PC)⇒転送(ケータイ)⇒カーナビ(車)⇒歩行者ナビ(ケータイ)といった流れを作って、シームレスにより便利に使えるナビを提供されようとしている。どこに行くにしろ大半は、最後に車から降りて、歩いて目的地に行くことになるので、ケータイナビとの連動は地図が苦手な人にはよさそう。

・「DGRader:iPhone対応 未来型空間レーダーアプリ」・・・株式会社サイバーマップ・ジャパン 笹田忠靖様
航空管制塔にあるレーダー盤のような画面が、iPhoneのディスプレイに光る。くるくる回るレーダーに対し、見つかった近くのコンテンツがふわっと浮き上がって光る。コナン君のメガネみたいで、SF映画を見ているような感じ。リリースやYouTubeで見ていましたが、生DGRaderは初めて。既に、笹田さんのiPhoneには、LocoStickerのAPIもつないでいただいていて、近くのブログが、ピコーーーんと見つかるのが印象的でした。様々なAPIを自由にマッシュアップできるマッシュアップビルダーでもあり、これからいろんなコンテンツを組み合わせて、オリジナルのマイサービスを作る人が増えそう。レーダーらしく、黒の背景に緑の軌跡のモノトーンについては、徹底的に拘ったとのことでした。

以上、大変密度の濃いイベントで、ジオな情報だけでなく、人と知り合う面でも得るものが多く、またLocoStickerもたくさんの方に知っていただけたかと思います。熱いイベントでした。

2008年10月20日

MA4の最優秀賞は、ChaMap! LocoSticker賞は、Golazo MA4

 2008年10月19日(日)グラントーキョーサウスタワー23階で行われた、Mashup Awards 4の授賞式。我々、LocoStickerチームからも、API提供企業として参加してきました。
 
  

 審査員の方々が相当悩まれた末に決まった最優秀賞は、KentaroさんのChaMap。おめでとうございます。

  
 
 Enjoy Geo Communication!とあるように、地図上に表示されるコンテンツで、チャットを使ってコミュニケーションを楽しむというもの。ゲーム感覚のUIでまさに楽しく使うことができます。主催者の方も、「インフラとしての作品でもあり、今後何か予感させられるサービス。」とのこと。そして、我々にとっては何よりも、LocoSticker 位置情報付き検索APIを使っていただいていたことが嬉しかったです。
 作者のKentaroさんにお話を伺ったら、「住んでいるところが田舎で、そこの検索結果を出してくれたのが、LocoStickerだけでした・・」といってくださいました。
 ブログをクローリングし、自動的に位置情報を付与するという仕組みによって、これだけ大量のコンテンツを位置情報をキーにして検索可能にしています。さらには、ChaMapで入力したチャットの文章に対して、位置表現特定APIを使っていただくと、チャットの文章の場所をプロットさせることも容易です。これからもどしどし使ってください。


 LocoSticker賞(沖電気工業賞)は、日産自動車賞とダブルで受賞となった、「Golazo MA4 -ココで何する?-」に決まりました。おめでとうございます。

  

 Webサイトから引用させていただくと、
==============
 「Golazo MA4」は、ブラウザで見ているページや入力した文章の内容から位置情報を自動抽出し、気になるお店やプレイスポットなどの情報を、場所付きのメモとして、簡単にクリッピングできるサービスです。
==============
 とのこと。LocoStickerの位置表現特定APIをうまく使っていただき、地図上にメモを残すといった実用性の高いサービスにマッシュアップしていただけたと思います。また、カーナビとの連携も興味深く、まさにその場所の情報を取るというサービスにぴったりです。

 今後も精度向上、機能強化等発展させていきますので、ご期待ください。

 Mashup Awards 4の様子をこちらのサイトで紹介しています。よろしかったら、ご覧ください。

2008年10月01日

フォートラベルラボで LocoSticker を使ったサービス「地図から旅行記探検!(国内版)」が公開されました

フォートラベルラボで LocoSticker を使った新しいサービスが公開されました。
「地図から旅行記探検!(国内版)」

「地図から旅行記探検!(国内版)」のスクリーンショット

すっきりした使いやすいインタフェースで、地図を使ってフォートラベルの旅行記や写真を見てまわることができます。自分が行きたい観光地についてのいろんな人の旅行記や写真を見ていると、旅行のイメージがすごくふくらんできます。

是非使ってみてください。

2008年08月18日

The Documentation of UDF, distance_sphere() and distance_spheroid(), for MySQL

This is a documentation of UDF, distance_sphere() and distance_spheroid(), for MySQL.

続きを読む "The Documentation of UDF, distance_sphere() and distance_spheroid(), for MySQL" »

2008年08月15日

MySQL向け距離関数 distance_sphere(), distance_spheroid() のドキュメント

先に distance_sphere(), distance_spheroid() for MySQL を公開しましたが、
ドキュメントがダウンロードして解凍しないと見れないのは不便だということなので、ここに置きます。
また配布物の中に日本語ドキュメントがなかったので、まずは日本語ドキュメントを。

続きを読む "MySQL向け距離関数 distance_sphere(), distance_spheroid() のドキュメント" »

2008年08月12日

FOMA(F904i)を使ってベトナム、タイでGPS測位できるか試してみました。

 夏季休暇でベトナム、タイを旅行した際に、FOMA(F904i)のGPSで海外で測位できるか試してみました。結論として、今回は2カ国とも測位できませんでした。

 事前に調べた情報では、FOMAのGPSには

  a: ネットワークアシスト方式に対応
  b: ネットワークアシスト方式と単独即位方式に対応

の2種類があるらしく、aタイプは圏外だと測定できない。手元にあるのはF904i。DOCOMOのスペック表を見るとbタイプ。期待できそうです。

 まずは出発前に関空で測定...当然OK。機内は...携帯は電波を発する電子機器なので使用不可です。

 いよいよベトナムはハノイ、ノイバイ国際空港(Noibai International Airport)に到着、入国審査後、空港前、空が見えるところまで出て行って測定開始。GPS測定を開始すると

「電波が入りにくいため測位に時間がかかります」

gps01.jpg

と警告画面がでるものの測位はできそう。続けます...本当に時間がかかります...3分ほど直立状態。

そして結果は、

「今いる場所の確認に失敗しました」

gps02.jpg

orz ダメでした。2回リトライしてみましたが同様。

 空港はあきらめ、旧市街にあるホテルに。ここでもトライするも、やはりNG。いずれも建物が周りに多い状況なのが気になります。

 翌朝「ホアルー・タムコックツアー」に参加し、ハノイ郊外へ。休憩所(詳細位置不明)で測位開始。ここは周りに休憩所以外の建物はなく、空への見通しは完璧。ひとり休憩場の外、焼けるような日差しの中で測位...しかし、ダメでした。ハノイの測位はここで断念。

 数日後、今度はタイはバンコク、スワンナプーム国際空港(Suvarnabhumi International Airport)へ。同様に入国審査後、空港前、空が見えるところまでいって測定開始...タイでもダメでした。バンコク市内でも測位してみましたが同様。

 帰りはベトナム、ホーチミンのタンソンニャット国際空港経由(Tansonnhat International Airport)経由。ここでも測定しようかと思いましたが、何と入国拒否されてしまいました。滞在時間が短かすぎるという理由。入国規定に「短かすぎる」という理由は明文化されていないのですが、同じ便で着た多くの日本人が入国拒否されてました。

 結局、ベトナム、タイの2カ国では測位には一度も成功しませんでした。しかし、他国では成功したとの情報もあるようなので、他にも何か条件、例えば3G対応...タイ、ベトナムは3G未対応,F904はGSM非対応、などがあるのかもしれません。検証するために、次は3G対応国に行ってみたいですが...次に海外旅行に行けるのは、いつのことやら。

2008年07月22日

LocoSticker API を Mashup Awards 4 に提供

OKI がMashup Awards 4の協賛企業として参加することになり、LocoSticker API(位置表現特定、位置情報付きコンテンツ検索、ジオコード)対象APIとして使っていただけるようになりました。部門賞の賞品がまだ決まってませんが、是非 LocoSticker API を使った作品を作ってご応募ください。 Mashup Award 4th

2008年07月08日

distance_sphere(), distance_spheroid() for MySQL

distance_sphere(), distance_spheroid() for MySQL

mysql-udf-distance_spheroid-1.0.tar.gz

I release 2 functions, distance_sphere(), distance_spheroid(), for MySQL.
The functions are provided under the GNU General Public License Version 2.
These are compatible with same name functions in PostGIS.
I tested with only mysql-5.1.23-beta-GIS.
( http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/ )
Please refer to documentations in this tarball for more information about compiling and using.
Or refer to "The Documentation of UDF, distance_sphere() and distance_spheroid(), for MySQL"

The functions are derived from lwgeom_spheroid.c in PostGIS by Refractions Research Inc, ( http://postgis.refractions.net ).
Thanks to Refractions Research Inc.


I'm sorry that I don't prepare enough documents with English and my poor English.

PostGISには、緯度/経度で表された二点間の距離を求める
distance_sphere(), distance_spheroid()という関数があるのですが、
MySQLでは、現状、これらの関数が用意されていません。
そこでMySQLのUDF(User Defined Function)として、これらの関数を
PostGISに含まれているソースコードlwgeom_spheroid.c((c)Refractions Research Inc)を
元に作成しました。

MySQLの内部データ構造にアクセスする関係で、通常のUDFとは異なるコンパイル
手順が必要です。詳しくは配布ファイルに含まれているドキュメントを参照してください。
あるいは、MySQL向け距離関数 distance_sphere(), distance_spheroid() のドキュメントを参考にしてください。

現在、http://downloads.mysql.com/forge/mysql-5.1.23-beta-GIS/ より
ダウンロードした mysql-5.1.23-beta-GIS への追加でのみ動作を確認しております。

UDFとして登録した後は、PostGISのdistance_sphere(), distance_spheroid()と
同様に使用できます。ライセンスは GNU General Public License Version 2 となります。
ご興味のある方は、一度お試しください。コンパイルや使用方法に関する詳細は
tarballの中のドキュメントを参照ください。


最後になりましたが、GPL2でソースコードを公開された Refractions Research Inc, に感謝します。

2008年06月29日

位置情報関係のAPIのURLが変更になります

位置情報関係のAPIのURLが変更になります。
対象となるAPIは以下の3つです。


これまでは


http://okilab.jp/project/location/api/v1/XXX

で呼び出していましたが、これからは

http://api.locosticker.jp/v1/XXX

になります。

トップページでお知らせしている通り、6/30の午後にOKILab.jpは長時間のメンテナンス停止を予定しています。その間位置情報関係のAPIも使えなくなってしまいますが新URLに移行する上記3URLは、新しいURLで呼び出す限りはOKILab.jpのメンテナンス中も利用できますので、ご利用いただいている場合はそれまでに新URLにお切り替えください。(新URLのアナウンスがぎりぎりになってしまってすみません)

当面はどちらでも呼び出せるようにしてありますが、旧URLの方は7月末をもって廃止する予定です。

では、今後とも位置情報関連のAPIをよろしくお願いします。

2008年04月10日

LocoSticker(位置情報抽出・管理サービス)を使ったサービスがリリースされました

livedoor さんの新しいサービス livedoor ブログマップリリースされました。

このサービスには我々の位置表現特定API位置表現付きコンテンツ検索APIが使われています。 このリリースに合わせて、これらのAPIを含む位置表現抽出・管理サービスに LocoSticker という名前を付けました。いろんなコンテンツ(手始めはテキスト情報)に位置情報のステッカーをペタペタ貼り付けるイメージです。今後とも LocoSticker をよろしくお願いします。

さて、livedoor ブログマップですが、livedoor Blogのいろんな記事を位置情報で結び付けるサービスとなっています。自分で位置情報を指定しなくても、記事の内容に応じて地図上に表示されるのが特長です。livedoor Blog ユーザの方はカスタマイズ画面から簡単に設定できるので、是非ブログパーツを貼り付けて使ってください。
また、サンプルとして見て頂けるブログを立ち上げたので、試してみてください。

お隣ブログ
地図を使って場所を指定すると、その周辺について書かれたさまざまなユーザのブログが地図上にプロットされます。

locosticker44.jpg



マイブログマップ

自分が書いた記事をまとめて地図上にプロットします。

locosticker55.jpg



マイブログマップパーツ

表示中のブログ記事がどの場所のことを書いているのかをブログパーツ上の地図にプロットします。「お隣ブログ」ボタンを押すことで、その記事のお隣ブログを見付けることもできます。

locosticker11.jpg



話題のスポット

ブログから抽出したスポット名の情報を使って、「ホットな」スポットを表示します。



2008年03月23日

「第1回ジオメディアサミット」に参加しました

「第1回ジオメディアサミット」に行ってきました。
ライトニングトークで使った資料を置いておきます。

アルゴリズムの簡単な解説も挟んだりして、ライトニングトーク全体のバラエティ感を出すのに多少は貢献できたのではないでしょうか。途中ちょっとしたハプニングがあってあせりましたが、なんとか時間内にしゃべりきれました。というか、せっかくロスタイムをもらえたのだから、最後のその他のAPIの宣伝のところをもうちょっとゆっくりしゃべれば良かったなと後で思いました。まだまだ練習どおりにしかプレゼンできないなあ。

発表した甲斐あって、懇親会ではいろんな方から声を掛けていただいてうれしかったです。この分野ではまだまだ駆け出しなので、いろいろな人と出会えるこういう機会はすごく貴重です。運営のみなさまがたに感謝です。次回も期待しています。

2008年01月15日

WebService::OkiLab::ExtractPlace

隣のチームの Tsukamoto さんが位置表現特定APIを Perl プログラムで利用するためのモジュールWebService::OkiLab::ExtractPlaceを作って CPAN に登録してくれたのでご紹介します。

使い方は以下の通り。

#!/usr/bin/perl
use WebService::OkiLab::ExtractPlace;
use Data::Dumper;
# must be UTF-8
my $text = '東京から名古屋駅を通過して大阪駅に着きました。';
$text .= '大阪市中央区本町に到着しました。';
my $explace = WebService::OkiLab::ExtractPlace->new;
my $result = $explace->extract($text);
print Dumper($result);
実行結果
debian:~ 1007 % perl extract_place.pl
$VAR1 = {
          'result_select' => [
                               [
                                 {
                                   'lat' => '34.702499',
                                   'text' => '大阪駅',
                                   'weight' => '1',
                                   'type' => 'spot',
                                   'lng' => '135.494982'
                                 },
                                 {
                                   'lat' => '34.686394',
                                   'text' => '大阪',
                                   'weight' => '1',
                                   'type' => 'spot',
                                   'lng' => '135.519994'
                                 },
                                 {
                                   'lat' => '34.683764',
                                   'text' => '大阪市中央区本町',
                                   'weight' => '1',
                                   'type' => 'address',
                                   'lng' => '135.509592'
                                 },
                                 {
                                   'lat' => '34.682015',
                                   'text' => '本町',
                                   'weight' => '1',
                                   'type' => 'spot',
                                   'lng' => '135.499095'
                                 }
                               ]
                             ]
        };

詳細は perldoc を参照してください。

2007年12月01日

位置情報関連のAPIを公開しました

先日、位置情報関連のAPIを3つ公開しました。

[位置表現特定API]
与えられたテキストから、その主題との関連の強い位置表現(住所やスポット名など)を抽出し、緯度経度情報付きで返すAPIです。単純に住所やスポット名らしき文字列をピックアップするのではなく、文章の内容に応じて絞り込みをかけているところがミソです。名前こそ「位置表現特定」となっていますが、その実としては、「テキストの場所」を特定することを目指しています。

APIの説明にも書きましたが、単純に文字列をピックアップするだけのアプローチには2つの大きな問題点があります。

  1. 同じ地名、スポット名に複数の候補がある
    たとえば、「清水寺」に緯度経度を振ろうとすると非常にたくさんの候補があります。(日本には「清水寺」というお寺がたくさんあるため(「清水寺」でジオコードした結果)) このAPIでは京都が話題の中心の場合は京都の清水寺の位置だけを返します。
  2. 地名、スポット名でないものを間違えてピックアップする
    「福井」さんが京都に旅行に行ったという風な話題の時に「福井」を地名として取ってしまっては困ります。このAPIではこのような地名との取り違えといった問題が起こりにくくなっています。

課題もたくさんあります。

  • スポット名データの拡充
  • 異表記対応
  • 絞込みの精度向上

[位置情報付きコンテンツ検索API]
いくつかのブログサイトを対象にしてクローリングし、位置表現特定APIを使って緯度経度とURLを対応付けたデータベースを作成しました。そのデータベースを対象にして緯度経度からブログエントリのURLを検索できるようにしたAPIです。

各ブログサイトの「旅行」や「地域」といった、位置情報を多く含みそうなカテゴリをクローリングの対象としています。

[GeocodeAPI]
いわゆるひとつのジオコーダです。位置表現特定APIの内部でも使用しています。

このジオコーダの面白い機能の一つに、位置表現と同時に緯度経度を与えて結果をソートさせるというものがあります。つまり、ある表現に対して複数の緯度経度が考えられる場合に、基準点から一番近いものを選べる訳です。

たとえば、「金閣寺と清水寺に行った」という文章があったとします。「金閣寺」の緯度経度は1箇所に定まりますが、「清水寺」にはたくさんの候補があります。こういう場合に、確定している金閣寺の緯度経度を与えることで京都の京都の清水寺が候補の最初に出てきます

以上3つのAPI、ぜひ使ってみてください。そして、ご意見ご要望、データの不備などがありましたらどしどしコメントをお寄せください。

2007年11月13日

IEで「GMap2は宣言されていません」で Google Maps が表示されなくなった場合の対処方法。

IE(Internet Explorer)で、Google Maps を利用しているページを開くと、 稀にエラーになってマップが表示されなくなることがあります。 しかも一旦、エラーになると、リロード(更新)しても解決しません。 シフトキーを押しながらのリロードでも解決しません。

その時のエラー情報をみると「GMap2は宣言されていません」とあります。 しかしFirefoxなどでは表示されますし、IEでも他のPCでは表示されたり...

実は私もこの現象に悩まされていたのですが、どうやら、IEのキャッシュの 問題のようです。残念ながら、これにプログラムで自動で対処する手段はまだ 見つけていません。手動でも「更新」やシフトキーを押しながらの「更新」では 解決できず、現在見つけている解決手段は、IEのキャッシュを以下の手順で 手動で消去することです。

 ツール>インターネットオプション>全般>インターネット一時ファイル>ファイルの削除

プログラムで直接対処することはできませんが、上記の対処をユーザに促すよう プログラムすることは可能です。以下にサンプルプログラムを記述しておきます。 new GMap2(); の前に記述してください。

  if (GBrowserIsCompatible()) {

    if(typeof(GMap2) == 'undefined'){
      alert("GoogleMapが利用できません。ブラウザのキャッシュを削除すると解決する可能性があります。");
      return;
    }

    map = new GMap2(document.getElementById("map"));
    ・
    ・
    ・

もっといい対処方法があれば、コメントやトラックバックで教えてください。

2007年10月03日

丁目じゃなくて丁

丁目処理シリーズ(?)第2段。
○○丁目 (○○は漢数字)は 丁目と扱って処理するよう処理してたのですが、
結果を見ると、大阪の堺市とかうまく処理できていない。元データを見ると
「北三国ケ丘町一丁」とかなっている。「目」が脱字? と思い調べてみると、
「丁」で正しいらしい。なんでも明治時代からの由緒正しい方法だそうな。

参考URL:http://www.city.sakai.osaka.jp/city/info/_kukaku/17052052.html

とはいえ、単純に○○丁 (○○は漢数字)は 丁目 と処理すると、
下八丁(秋田県横手市)なんて地名もあるわけで、悩ましいです。

2007年10月01日

位置情報とCO2

 先日、新聞を読んでいると、大きな広告がありました。カーナビの新製品の紹介です。その中に、ナビの性能をアピールするところがありました。正しくナビができるとCO2の削減になるとのこと。どういうことかというと、旅行などで知らない土地に行ったとき、迷うことが少なくなるので、車の走行距離が短くなり、かつ時間も有効に使えるとのこと。

 なるほど。もっともなキャッチですね。

 我々も知らない土地に行ったとき、「この辺の掘り出し情報は?」というアクションがさまざまなデバイスで簡単にできて、すばやく応答できる仕組みを開発していきます。

2007年09月25日

gungi「チズトーク」に行ってきました。

先週末、エンジニア交流勉強会gungi「チズトーク」に行ってきました。

gungi には初参加です。
今回「位置情報」がらみってことで参加することになったのですが、
gungi の内容は既に他の方のブログ(こことかこことか)に詳しく書いてあるので(ry
ただ、それだけでなく「ラボ」という形態についても色々参考になりました。
我々も「ラボ」を看板にあげていますが、まだまだアルプスさんや、
マピオンさんに比べ体制からして遅れているのを実感。 orz...

gungi では単に聞いているだけの人でしたが、そのまま懇親会にも参加。

 大阪から来てたのが私です。V(^O^)V

もちろん知らない人ばかりで、しかも初参加なので、懇親会も隅っこの方で大人しく...
飲むことができない、盛り上がった飲み会でした。

続きを読む "gungi「チズトーク」に行ってきました。" »

位置連動型広告始まる

 キーワードでWebサイトを検索をしたときにそのキーワードに関連する広告を提示するというキーワード連動型広告に対し、なんらかの方法で位置情報による検索を行ったときにその位置情報に関連する広告を提示するという位置連動型広告のサービスが提供されるようになってきた。

 最近のニュースでは、「現在地近くの広告配信・サイバーマップとオプトが開始」(NIKKEII NET 2007/9/24)というサービス。
 
 レジャー施設などのルート探索や、飲食店の検索。ビジネスでは営業訪問先の確認など、Web上で地図を見る機会が増えています。その場所に興味があるため、周辺店舗やホテルなどの地域情報は確かにマッチング感度が高そうです。

 このように、GPSを使って位置情報を自ら送信するような場面では有効に働く一方で、いかにして位置情報を送信させるようなサービスを提供するかが今後の鍵でもあります。そこで、先のエントリーにもあるように、自然言語処理技術を効果的に適用して住所表現抽出を精度良く行うことで、新たなサービスが創出され、「アドマッチ」のような位置連動型広告サービスとの連携が進んでいくと考えています。

2007年09月21日

MeCabで住所抽出

「MeCab 0.90 だけをつかって Auto Link」を参考に、MeCabを使って住所抽出してみます。

元データとして国土交通省国土計画局国土情報整備室の街区レベル位置参照情報を利用します。ダウンロードページから、今回は平成18年度版の大阪府全域のデータ(27000-05.1a.zip)をダウンロードしました。

$unzip 27000-05.1a.zip
Archive:  27000-05.1a.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
    14907  04-10-07 16:07   md_27_2006.xml
 24563015  06-11-07 21:01   27_2006.csv
     3325  01-22-07 20:00   format_2006.html
 --------                   -------
 24581247                   3 files
$head -3 27_2006.csv | nkf -e
"都道府県名","市区町村名","大字・町丁目","街区符号・地番","座標系番号","X座標","Y座標","緯度","経度","住居表示フラグ","代表フラグ","平成17年度履歴フラグ","平成18年度履歴フラグ"
"大阪府","茨木市","鮎川一丁目","1",6,-131247.8,-37365.6,34.816231,135.591556,1,1,0,0
"大阪府","茨木市","鮎川一丁目","2",6,-131248.3,-37346.4,34.816227,135.591766,1,1,0,0

MeCab の辞書を作るために dic.csv, matrix.def, char.def, unk.def の4つのファイルを作ります。

dic.csv: 辞書ファイルです。27_2006.csv を基に以下のようなファイルを作ります。

大阪府茨木市鮎川一丁目1,0,0,-16627,大阪府茨木市鮎川一丁目1,34.816231,135.591556
大阪府茨木市鮎川一丁目2,0,0,-16627,大阪府茨木市鮎川一丁目2,34.816227,135.591766
大阪府茨木市鮎川一丁目3,0,0,-16627,大阪府茨木市鮎川一丁目3,34.816491,135.592014

変換用のスクリプト(make_dic_csv.pl)は以下の通りです。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use open ':encoding(shiftjis)';
binmode STDIN, ':encoding(shiftjis)';
binmode STDOUT, ":utf8";

while (<>) {
    next if (/^\"都道府県名/);
    my(@elm) = split(',', $_);
    my $address = $elm[0] . $elm[1] . $elm[2] . $elm[3];
    $address =~ s/\"//g;
    my $cost = int(-400 * (length($address)**1.5));
    $cost = -36000 if ($cost < -36000);
    print "$address,0,0,$cost,$address," . $elm[7] . "," .  $elm[8] . "\n";
}

matrix.def: 連接表です。元記事と同様にします。

1 1
0 0 0

char.def: 文字セットの定義ファイルです。これも元記事と同じ。

DEFAULT 1 0 0
SPACE     0 1 0
0x0020 SPACE

unk.def: 未知語に対する品詞リスト。これも元記事と同じ。

DEFAULT,0,0,0,*
SPACE,0,0,0,*

dicrc: address というフォーマットを作成し、それがデフォルトの出力になるようにします。住所文字列の部分(と緯度経度)だけを出力するようにしています。

dictionary-charset = utf-8
cost-factor = 800
bos-feature = BOS/EOS
output-format-type=address
node-format-address = %H\n
unk-format-address =
eos-format-address  =

実行します。

$ls
char.def  dicrc  make_dic_csv.pl  matrix.def  src/  unk.def
$ls src
27_2006.csv
$ ./make_dic_csv.pl src/27_2006.csv > dic.csv
$/usr/lib/mecab/mecab-dict-index -f utf-8 -c utf-8
reading ./unk.def ... 2
emitting double-array: 100% |###########################################|
reading ./dic.csv ... 279452
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1x1

done!
$echo 昨日、大阪府大阪市中央区本町二丁目5に行った | nkf -w | mecab -d . | nkf  -e
大阪府大阪市中央区本町二丁目5,34.683834,135.504052

ここまでは結構簡単です。ただし、実用するには

  • 丁目、番地等の表記の正規化
  • 市レベル、区レベルから始まるエントリの追加
などの工夫が必要になります。

2007年09月19日

400,005丁目

○○丁目 (○○は漢数字)は 丁目と扱って処理するよう
プログラムを書いて走らせてみたところ、

400,005丁目

なんていう、とんでもない丁目が...

どんだけ丁目があるんだろと調べてみたら、
地名が「南四十万」で丁目は「五丁目」でした。

漢数字処理ルーチンで万まで扱えるようにしたのが
失敗でした。(^^;

※ちなみに、石川県金沢市に存在する住所です。

2007年09月17日

ケータイGPSの位置情報で遊ぶ

 ケータイGPSを使って、その場所にメッセージや写真を投稿したり、その場所の近くの情報を取得したりと、最近いろいろなサービスがあります。そんな中、前回アクセスした場所から、今回アクセスした場所までの距離を出してくれる機能が、doodleというサービスにあります。

 このピュアに距離を表示する機能を使って、こっそりと楽しんでいるのが、「ピッタリ移動」。たとえば、50km、100km、200km・・・など。

 今狙っているのは、400km移動です。伊丹空港から、羽田空港までがちょうどそれぐらいで、位置情報を取得する場所を微妙に調整しながら誤差を修正しています。先日は、蒲田から羽田空港に向かうバスの、羽田二丁目バス停付近と、伊丹空港の大阪駅前行き4番バス乗り場の間で、400.4kmでした。この400mをどう微調整するかが問題です。

 一人で遊べますので、手ごろな10kmや20kmぐらいで遊んでみてはいかがでしょうか?

Google Maps API と Yahoo!地図情報Webサービスの比較

機会有って Google Maps と Yahoo!地図情報Webサービスの API の比較表を作ってみました。
すべての機能を網羅しているわけではありません(特にGoogle Maps)し、直接関数が用意されていなくても組み合わせで簡単に実現できる機能もありますが、ざっくり比べるのには使えるんじゃないかと思います。

Google Maps API Yahoo!(JavaScript版)Yahoo!(Flash版)
マップの種類 地図
航空写真
地図+航空写真
地図
航空写真
地図
航空写真
緯度経度を指定してのスクロール
ズームレベルの指定
キーボードによる操作 × ×
表示位置の保存/復帰 ホーム位置への復帰のみ ホーム位置への復帰のみ
中央の緯度経度取得
表示領域の右上・左下の緯度経度取得 ×
マップの回転 × ×
不透明度指定 × ×
中心点の表示
カスタムコントロールの表示 × ×
マーカーの表示
マーカーの一括表示 ×
マーカーのカスタマイズ ×
マーカーのドラッグ
吹き出しの表示
吹き出し内でのHTMLの記述
吹き出しの複数表示 × ×
タブ付き吹き出し × ×
緯度経度を指定しての吹き出し表示 × ×
マップクリック
マップ移動開始 × ×
マップ移動中 ×
マップ移動終了
ホーム位置に移動した × ×
倍率変更
マップモード変更
吹き出しが開いた ×
吹き出しが閉じた ×
マウスカーソルがマップ上に来た ×
マウスカーソルがマップから離れた ×
マウスカーソルがマップ上で動いた ×
マップのドラッグ ×
マップの読み込み完了 ×
マーカークリック
マーカーダブルクリック ×
マーカー上でマウスボタンが押された ×
マーカー上でマウスボタンが離された ×
マーカー上にマウスカーソルが来た ×
マーカー上からマウスカーソルが離れた ×
マップ上に線を表示 × ×
2点間の距離を計算 × ×
2点が収まる縮尺を計算 ×
一定期間ごとのスクロール × ×
カスタムオーバーレイ(任意の画像やテキストの表示) × ×
ルート再生 × ×
Google Maps APIYashoo!ローカルサーチ!PI
ジオコーディング
緯度経度を指定しての周辺検索×住所・郵便番号・ランドマーク・駅・Yahoo!クーポン

2007年09月12日

「市」や「郡」の文字を市名や郡名に含む市や郡

よく分からないタイトルになってしまいましたが... (^^A

住所を分解処理するときに、「市」や「郡」といった文字を左から探して区切り、
市名や郡名を取り出すのが簡単なのですが、中にはそうは行かない住所も。
そこでまずは、市名又は郡名の中に「市」や「郡」を含むところを探してみました。

市名の中に「市」の文字がある市
市川市(千葉)、市原市(千葉)、四日市市(三重)、廿日市市(広島)

市名の中に「郡」の文字がある市
郡山市(福島)、郡上市(岐阜)、蒲郡市(愛知)、大和郡山市(奈良)、小郡市(福岡)

郡名の中に「市」の文字がある郡
余市郡(北海道)、高市郡(奈良)

郡名の中に「郡」の文字がある郡
なし

こんなもんでしょうか。誤りなどの指摘歓迎です。(^^A

2007年09月11日

ケータイGPSのパラメータ(実験)

W32HとW52SHで実験してみました。

W32H

ver=1&datum=0&unit=0&lat=%2b34.41.03.07&lon=%2b135.30.20.88&alt=99&time=2007091\ 1094451&smaj=536&smin=536&vert=100&majaa=0&fm=4

W52SH

ver=1&datum=0&unit=1&lat=%2b34.68298&lon=%2b135.50034&alt=101&time=200709110950\
59&smaj=255&smin=255&vert=100&majaa=0&fm=4

W32Hでは、確かに度分秒表示、W52SHでは度表示になっていました。
unitの情報を使えば、表示形式がチェックできるようです。この違いを吸収するように、「ひまつぶし」を改修しましたので、また、使ってください。

2007年09月10日

ケータイGPSのパラメータ

 ケータイGPSを使ったアプリケーションの一例として、「ひまつぶし」なるものを公開しています。
 キー入力は一切無し。アクセスすると、大阪の梅田をスタート地点として、その場所がキーとなるブログと、その時点でのキーワードがキーとなるブログの両方を表示します。だらだらと見ていくまさに暇つぶし。
 
 ところが、最近ケータイを W32HからW52SHに機種変したところ、「別のホットワードでGo」を選んだ際に、稚内を示すようになりました。緯度経度も4桁の数字が並んでいます。

 どうやら緯度経度のパラメータの渡し方が、度分秒表示から、度表示に変わったようです。同じキャリアで異なる表記になると機種毎に対応しないといけないので大変です。ひとまず、度分秒表示には小数点が3つはいるので、この特徴を手がかりに修正したところ、正常に大阪の場所を表示するようになりました。

 以前使っていたW32Hをもう一度動かして、動作検証します。

2007年09月05日

libproj を使って平面直角座標(JGD2000)を緯度経度に変換する

libproj を使って平面直角座標(JGD2000)を緯度経度に変換するサンプルソースです。

国土地理院の発行する数値地図ではY,Xの順に入っているので、このツールも 入力は"Y X 座標系" の順に入力するようにしています。

#include <stdio.h>
#include <projects.h>

#define WKBUFSIZE 1024

static char* JGD2000_ZAHYOKEI[]
= {"+init=epsg:2443", "+init=epsg:2444", "+init=epsg:2445", "+init=epsg:2446",
   "+init=epsg:2447", "+init=epsg:2448", "+init=epsg:2449", "+init=epsg:2450",
   "+init=epsg:2451", "+init=epsg:2452", "+init=epsg:2453", "+init=epsg:2454",
   "+init=epsg:2455", "+init=epsg:2456", "+init=epsg:2457", "+init=epsg:2458",
   "+init=epsg:2459", "+init=epsg:2460", "+init=epsg:2461"};

int main()
{
  char* str_param[1];
  char  wkbuf[WKBUFSIZE];
  float x,y;
  int a;

  PJ* proj_param;
  XY idata;
  LP odata;

  while(fgets(wkbuf, WKBUFSIZE, stdin) != NULL){
    /* パラメータが Y,X の順なのに注意! */
    if(sscanf(wkbuf, "%f %f %d", &y, &x, &a) != 3){
        fprintf(stderr, "format error: %s\n", wkbuf);
        continue;
    }
    if(a < 1 || a > (sizeof JGD2000_ZAHYOKEI / sizeof JGD2000_ZAHYOKEI[0])){
      fprintf(stderr, "illegal number: %d\n", a);
      continue;
    }
    str_param[0] = JGD2000_ZAHYOKEI[a-1];
    idata.u = x;
    idata.v = y;
    proj_param = pj_init(sizeof(str_param)/sizeof(char *), str_param);
    odata = pj_inv(idata, proj_param);
    pj_free(proj_param);
    odata.u /= DEG_TO_RAD;
    odata.v /= DEG_TO_RAD;
    printf("%.6f %.6f\n", odata.u, odata.v);
  }
  return 0;
}


コンパイルは以下のようにします。
cc -g -o yx2lnglat yx2lnglat.c -lproj

利用は、例えば以下のように実行します。
echo -145112.8 -43458.0 6| ./yx2lnglat
(実行結果)
135.525678 34.690998

もっとも、単に変換するだけなら、プログラミングせずとも、 invproj コマンドを使えばOKです。

参考
http://bubble.atnifty.com/modules/bwiki/index.php?libproj
http://proj.maptools.org/man_pj_init.html

2007年03月22日

緯度経度駅検索API

緯度経度を指定してその近くの駅の位置情報をJSON形式で取得するAPIを公開しました。 このAPIを使ったサンプルも有ります。

 リクエストURL

http://okilab.jp/cgi-bin/geometry/find_station.cgi

 リクエストパラメータ

パラメータ説明
lat緯度(世界測地系・小数点表記: (例)34.685452)
lng経度(世界測地系・小数点表記: (例)135.527859)
limit検索件数(指定しない場合は1、最大20)
callbackJSONP形式で結果を返す場合のコールバックの名前

 レスポンス

JSON(callbackを指定した場合はJSONP)形式による連想配列(Content-type: application/json; charset=utf-8)
距離の近い順にソートします。
{"stations":
 [
  {"name": 駅名1,
   "line": 路線名1,
   "lng": 経度1,
   "lat": 緯度1,
   "distance": 距離1(メートル)
   },
 ※指定回数{"name"…距離n}を繰り返し
 ]
}

駅データは国土交通省が提供する国土数値情報 鉄道データ(2005年度版)を基に作成しました。
(2007/08/22より)
このAPIで得られた駅データの内容についての責任は沖電気工業株式会社(以下、「OKI」という)Iにあります。しかしながらOKIはデータの内容について一切保障いたしません。予めご了承ください。

 リクエスト例

http://okilab.jp/cgi-bin/geometry/find_station.cgi?lat=35.0000&lng=135.0000&limit=3

 レスポンス例

{"stations":
 [
  {"name": "日本へそ公園駅",
   "line": "加古川線",
   "lng": "134.9975",
   "lat": "35.002083",
   "distance": "324.806453487825"
   },
   {"name": "比延駅",
    "line": "加古川線",
    "lng": "134.995833",
    "lat": "34.988472",
    "distance": "1336.87184253955"
   },
   {"name": "黒田庄駅",
    "line": "加古川線",
    "lng": "134.9925",
    "lat": "35.022639",
    "distance": "2608.35883376478"
   }
 ]
}

2007年02月23日

住所抽出APIの使用例を公開しました

住所抽出APIを使った簡単なサンプルサービスを公開しました。
URL を入力すると、そのページに含まれる住所文字列を一覧表示し、そのうちどれかをクリックすると地図上に表示します。

2007年02月10日

住所抽出API

URL を指定すると、そのページに含まれる住所の一覧をJSON 形式で返します。callback パラメータを指定することで JSONP 形式で返すこともできます。

 リクエストURL

http://okilab.jp/address/address.do

 リクエストパラメータ

パラメータ説明
url住所文字列を探すウェブページのURL
callbackJSONP 形式で結果を返す場合のコールバックの名前

 レスポンス

JSON(callbackを指定した場合はJSONP)形式による住所文字列の配列

 リクエスト例

http://okilab.jp/address/address.do?url=http://www.oki.com/jp/Home/JIS/Profile/subsid.html

 レスポンス例

["埼玉県本庄市小島南4-1-1",
"東京都江東区南砂2-1-12",
"東京都品川区北品川1-19-4",
...]