gisの最近のブログ記事
スライドはこちら、
スピードが早い山手線ということもありちょっとずれてますが、徒歩でログを取っている分にはかなり精度高くログが取れているように思います。実際、マッピングも普通にできます。
時間があれば、Android 版とも比較してみたいですね。
ソースはgithubにも置いてあります。
http://github.com/halsk/iPhone_GPS_Logger
今回とったログのKMZファイルも置いてあるので、Google Earth で山手線ツアーをしてみてはいかがでしょうか。
技評.jp の WEB+DB PRESS Vol.57 紹介ページ
スマートフォンでもケータイでも!
[速習]位置情報サービスGPSや基地局による位置情報を利用したサービスが注目を集めています。従来の携帯電話でも位置情報を利用できましたが,iPhone,Androidの登場をきっかけに,セカイカメラなど,これまでにはないサービスの可能性が広がっています。また,PostGISなど,位置情報サービスを作る土台となるソフトウェアも充実してきました。そこで本特集では,3キャリア(ドコモ,au,ソフトバンク)の携帯電話,iPhone,Androidのスマートフォンを対象に,位置情報サービスについて基本から解説していきます。
ということで、ケータイ3キャリア+スマートフォンで位置情報を使ったアプリケーションを開発する方法の解説を中心に、PostGIS のインストールから市区町村境界データの取り込み、PostGIS と連携した Ruby on Rails アプリケーションの開発なども含んでいます。@resaku さんによる、位置ゲーの開発チップスなども盛り込んだ特集となっており、位置情報を使ったモバイルサービスを作りたい方必見です。 実際に動作するソースコードもありますんで、よろしければフィードバックください。
実は、最初は GeoKit を使った原稿を書いていたのですが、Ruby on Rails を使っていない人にはあまり役にたたないということでボツとなった原稿ががあります。 告知だけではなんなので、次のポストでその原稿を掲載しておきます。
- 実践:GeoKit と iPhone で作る位置情報アプリケーション(ボツ原稿版)
- サーバアプリケーションの作成
- iPhone アプリケーションを作成する-1
- iPhone アプリケーションを作成する-2
本日から Firefox 3.5 の正式ダウンロードが開始されました。
これまでのバージョンでは Geode などのプラグインの形で提供されていた位置情報通知機能が標準搭載されるようになっています。 これで、Wi-Fi が使える PC であれば、ユーザの現在地を取得できるようになるわけです。 以前使われていた Geode の代わりに、Google の Geolocation サービスが採用されることになりました。
例によって早速実装してみました。
http://lab.cirius.co.jp/FirefoxGeolocationTest
(Firefox 3.5 以降のブラウザで閲覧してください。)
まず、他のブラウザの位置情報通知機能と同じく、位置情報を通知して良いかどうかを聞かれます。
(クリックで拡大します)
"許可"ボタンを押すと、現在地が地図上に表示されると思います。
実装方法は上のページを見てもらえればわかりますが、
navigator.geolocation.getCurrentPosition(handleSuccess, handleError);
というメソッドを利用して、現在地を取得することができます。
handleSuccess には、タイムスタンプと nsIDOMGeoPositionCoords の入ったオブジェクトがパラメータとして渡され、その中に緯度経度などが入ってきます。また、上記のページでは使っていませんが、watchPosition 関数を使い、定期的に位置情報をアップデートすることも可能です。
navigator.geolocation.watchPosition(handleSuccess, handleError);
というメソッドで、イベントハンドラを登録するだけです。ここで、「あれ?どこかで見たことある」と思った方もいるかもしれません。
なぜかというと、実は以前の記事で書いた iPhone 用の Geolocation API と同様の仕様なのです。
以前作った iPhone 用のテストページ (http://lab.cirius.co.jp/geoloc.html ) を Firefox 3.5 で見ると、動作するのがわかると思います。
さすが W3C で標準化されつつあるだけあって、同じコードで動作するようになっているんですね。
まだ試せていませんが、結果オブジェクトの仕様を見てみると、heading や speed などのプロパティもあるようです。
ちなみに、geolocation 機能が使えるかどうかは、以下の if 文で判定できます。
if (navigator.geolocation) {
/* geolocation is available */
} else {
alert("I'm sorry, but geolocation services are not supported by your browser.");
}
他のブラウザも追随してくると思います。位置情報を使っているサイトはこの機能を使ったサービスを実装してみてはいかがでしょうか。
関連記事
ついに iPhone Safari ブラウザから位置情報を取得できるようになります - Cirius Lab. ブログGears の Geolocation API の Wi-Fi 測位を使ってみた - Cirius Lab. ブログ
Firefoxの位置情報把握アドオン「Geode」を使ってみた - Cirius Lab. ブログ
Google ClientLocation API を使って IP アドレスから現在地を取得 - Cirius Lab. ブログ
参考URL(外部リンク)
Firefox 3.5 ダウンロードページFirefox 3.5 の位置情報通知機能
Firefox Geolocation API 仕様
以前から、国内のモバイルブラウザのように、iPhone のブラウザからでも GPS を使えるようにすべきということをつねづね言ってきたわけですが、ようやく時期バージョンから iPhone でも実装されるようです。
iPhone's Safari Browser to include Geolocationこのブログでも度々言及してきた、W3C の Geolocation API の仕様に沿っているものになるようです。
というわけで、さっそく実装してみました。http://lab.cirius.co.jp/geoloc.html
(iPhone OS 3.0 beta5 以降の Safari ブラウザで閲覧してください。)
上記URL にアクセスすると、まずは Safari 自体の Geolocation 機能の利用許可が表示されます。
次に、このページが存在するドメインに対して Geolocation 機能の利用許可が表示されます。
取得したロケーションを Google Maps に表示してみました。ちゃんとシリウスのオフィスが表示されています。
確認ダイアログですが、そのドメインでの最初の利用時にのみ聞かれて、一度許可をすればそれ以後は表示されないようになっています。
この辺は、GPS を利用する度に都度許可をしなくてはいけない日本の仕組みよりもスマートですね。
実装方法は上のページのソースを見てもらえればわかりますが、
navigator.geolocation.watchPosition(locupdate, handleError);
というメソッドで、イベントハンドラを登録するだけで使えます。
イベントハンドラ側の function は以下のようにしてみました。
function locupdate(pos) {
count ++;
var d = document.getElementById("d");
d.innerHTML = "lat : " + pos.coords.latitude +
"<br/>long : " + pos.coords.longitude +
"<br/>accuracy : " + pos.coords.accuracy + "<br/>";
if (count == 1){
initialize(pos.coords.latitude, pos.coords.longitude);
}
}
pos というパラメータに取得されたユーザの位置情報が含まれています。initialize という関数の中で、与えられた緯度経度の Google Maps 地図を表示しています。
(locupdate は位置情報を連続的に更新するので、最初の取得時にのみ地図を表示するようにしています。)
関連記事
Gears の Geolocation API の Wi-Fi 測位を使ってみたFirefoxの位置情報把握アドオン「Geode」を使ってみた
Google ClientLocation API を使って IP アドレスから現在地を取得
以下案内文。
FOSS4G2008 Tokyo(11月2日)、Osaka(11月7~8日)の開催に併設して、OSGeo財団日本支部では、ハンズオンセッションを開催します。
(東京と大阪、それぞれ同一講師が同一内容で90分枠で実施します)
案内サイトURL
http://www.osgeo.jp/foss4g-2008-%E3%83%8F%E3%83%B3%E3%82% BA%E3%82%AA%E3%83%B3%E3%82%BB% E3%83%83%E3%82%B7%E3%83%A7%E3% 83%B3/
今年9月にケープタウンで開催されたFOSS4G2008でワークショップ講師による、本場さながらのハンズオンが、東京と大阪で受講できるという、 初めての機会です。
大阪は、ジオメディアサミット関西が 8 日の午前に行われます。( その時間帯は重なってしまいますが)、 GoogleMapsのようなマッピングサービスの仕組みがどうなっているのかを知るのにも良い機会と思います。
講師3名共に、それぞれの開発メインストリームの著名人ですので、ミーハー的にもうれしいかも。
各セッション共に定員は10名で先着順の申込受付となっておりま
ちなみに pgRouting のセッションで講師を務める Daniel さんは、弊社とオークニーさんで共同提供させていただいている、Orkney Web Routing Service API にも深く関わっているナイスガイです。
W3C で Draft になっている、GeoLocation API Specification をアドオンで実装したものになります。
これにより、Geode をインストールしている Firefox ユーザであれば、JavaScript を使って現在地を取得することができるようになります。
Gears の geoLocationAPI と同種のものですね。
早速、テスト用にページを作ってみたところ、ラボのオフィスのある恵比寿の場所では緯度経度を取得することができました。
Geode Test Page
上記ページにサンプルコードも記載しておきましたが、
navigator.geolocation.getCurrentPosition(
successCallback, errorCallback, options )
という関数で現在地が取得できます。
今現在では
navigator.geolocation.lastPosition
navigator.geolocation.getCurrentPosition(
successCallback, errorCallback, options )
navigator.geolocation.watchPosition (successCallback, errorCallback, options)
navigator.geolocation.clearWatch( watchID )
の 4 つの機能が実装されています。
現時点では、Wi-Fi による測位に対応。
日本でも測位できたことに驚きましたが、サイトによる解説によると、Wi-Fi のデータベースには Skyhook 社のデータを使っているそうです。
Skyhook 社は iPhone の map アプリケーションでも使われており、 Wi-Fi に対応した位置情報データベースを保持している会社です。
カバーエリアは HP で公開されています。
http://www.skyhookwireless.com/howitworks/coverage.php
ここによると、日本のカバーエリアは以下のようになっています。(青い点がカバーエリア)
イマイチな状況ですね。Geode のサイトによると、将来的には Provider は選択できるようになるいようなので、 PlaceEngine が使えるようになると嬉しいのですが。
関連記事:Google ClientLocation API を使って IP アドレスから現在地を取得
・Gears の Geolocation API 公開
・W3C で Geolocation API の Editor's Draft 公開
・Maps API の ClientLocation API 公開
と、ブラウザから位置情報を取得する為の仕様が立て続けに公開されています。
W3C の方は Google が提出したものなので、今のところ Gears と同じ仕様です。
Gears は現在のところ IE、Firefox、Windows Mobile に対応していますが、将来的には他のモバイル OS にも対応する予定です。
Opera は次期ブラウザに Gears を採用するということを名言していますので、グローバルな位置情報取得手段としては標準になっていくのではないでしょうか。
PC から位置情報を取得しようとした場合、IP アドレスによるターゲティングがサポートされています。
Gears の方の GeoLocation API を試してみたところ 8月25日時点では日本からは利用できませんでしたが、
Maps API の ClientLocation API は問題なく動作しました。
Gears にはまだ IP アドレスターゲティングは実装されていないようですね。
以下にサンプルページを置いてあります。
IP アドレスからの位置情報判定
http://lab.cirius.co.jp/ClientLocationAPITest
会社からアクセスしたら無事渋谷区が表示されました。
都内での精度は市区町村レベルになっているようですね。
Google のインデックスと KML について。
コンテンツに地理的な属性が含まれる場合、KML などを使って Geo Sitemap を作成することで、Google に正しくインデックスされる仕組みになっています。
サイトに置いておくだけではなく、ウェブマスターツール から能動的にサイトマップを送信することもできます。
もちろん、Google にインデックスされると Google Maps などにも検索結果が表示されるわけですが、サイトの位置情報コンテンツと Google の Geo インデックスがどのように関係しているのかを示すチャートを見つけたのでご紹介します。
原文は以下のリンクから。
Content on Google somehere, somehow?
TechCrunch Japanese アーカイブ » Google、大規模な位置情報サービスをローンチへこれは面白い動きです。海外での位置情報取得方法のスタンダードとなる可能性を持っています。
http://jp.techcrunch.com/archives/20080531google-to-launch-large-scale-geo-services/
われわれの姉妹ブログ、Techcrunch UK はGoogle Gearsに位置情報サービス用APIが追加されているのを発見した。GoogleのGearsチームはしばらく前から今後追加されるAPIの準備をしていることが知られていた。それには、携帯アプリの開発者が位置情報を利用するためのデータに関するものが含まれていた。
もちろん現在のバージョンの Google Gears には搭載されていませんが、Google Gears の開発グループの Wiki には以下の内容が記載されています。
つまり、API ではThe Geolocation API allows web apps to retrieve the user's current position. The API should provide the following features:
- One-shot position requests (e.g. for recommendations sites -- "where am I right now?")
- Repeated position updates (e.g. for continuously updating one's location on a map)
- Ability to get the last-known position cheaply before doing an expensive new request
- Compatibility with future use as a singleton in the standard DOM (e.g. window.geolocation)
・現在地点の問い合わせ
・反復的な位置情報の更新
・負荷のかかる位置情報取得方法を選択する前に、最後に取得した地点を問い合わせる
・今後の標準 DOM との 互換性
の機能をサポートするようです。
GPS や基地局情報など、様々な位置情報取得方法を透過的に扱うこともできるようになります。
更に興味深いのは、TechCrunch の記事にある
今日われわれはGoogleはこの位置情報APIを支援するために、携帯の中継塔とWiFiホットスポットの位置を地図上に詳細にプロットする大規模なプロジェクトを進めていることを発見した。という記述。このデータベースが完成すると、GPS を使わなくても都市部であれば詳細な位置情報を取得することができるようになります。また、キャリアから基地局情報を提供してもらう必要もなく、Google 独自で位置情報データベースを構築することができます。
日本国内だと、PlaceEngine ( クウジット社 ) が Wi-Fi 電波から現在地を割り出す技術を持っています。こことの関係も気になるところです。
海外では日本のような位置情報ゲートウェイサービスがキャリアから提供されていないことが多く、ブラウザから位置情報を取得することはあまりできない状況でした。
GPS 対応のアプリを作れば可能ですが、開発のハードルもユーザーのハードルも高い。
もし Google Gears 対応のブラウザが広がれば、位置情報を扱うアプリケーションの開発ハードルが相当低くなると考えられます。
まだ Windows Mobile 以外のモバイル端末には対応していないようですが、iPhone や NOKIA への対応が進むと、かなり便利な API となりそうです。
独自仕様で先行してきた日本ですが、標準化仕様の策定にも存在感が大きい Google のこのような動きにどのようにキャリアが対応するのか興味深い所です。
(宣伝)日本国内であれば、GeoForm API を使えば 3 キャリア間の差異を考えずに透過的に位置情報を取得できます。Google Gears 普及まで待てない方はぜひご利用ください。
http://lab.cirius.co.jp/GeoFormAPI
Usage Limits の項目に、Use of the Google Static Maps API is subject to a query limit, of 1000 unique image requests per user per day.と書かれているわけですが、ここで書かれている "user" って、1APIキー?それとも1クライアント? どちらか疑問に思ったので、ちょっと調べてみました。
で、Google Group の質問の中に、ずばり答えがありました。
The docs say "subject to a query limit, of 1000 unique image requestsというわけで、1ユーザーというのは、1クライアントIPアドレスになるようです。
per user per day" - I assume by "user" this means per *client-side IP
address*, not *per API key*?
The query limit is per client-side IP address.
しかし、携帯電話から使う場合、1 端末 = 1 IP ではなくて、ゲートウェイ側でIPアドレスが決定されるんですよね。
なので、たまたま 複数の端末で 1 IP アドレスを共有していて、1000アクセスを超えるなんてこともあったりして?
- Cirius Lab.内リンク
- ラボトップ
- Geo Platform API
- ジオメディアサービス
- 最近のブログ記事
- スマートフォン勉強会で、iPhone のバックグラウンド測位についてお話しました。
- WEB+DB プレスで、位置情報サービスの特集を書きました
- Firefox 3.5 からは、位置情報通知機能 (Geolocation API) が標準搭載に
- ついに iPhone Safari ブラウザから位置情報を取得できるようになります
- FOSS4G 2008 Tokyo のハンズオンセッション
- Firefoxの位置情報把握アドオン「Geode」を使ってみた
- Google ClientLocation API を使って IP アドレスから現在地を取得
- KML と Google GeoIndex の関係図
- Google Gears に 位置情報取得機能が追加されるようです。
- Google Static Maps API の表示制限