フィード

リンク





Powered by
Movable Type
 OKILab.jp開発の あ し あ と です。

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 で発表しました。" »