位置追跡の基本コマンド(?)とも言うべき、
navigator.geolocation.watchPosition
ですが、なめらかな追跡を実現出来ません。
ネイティブなアプリとして、Javaによる実装は成功し、移動にほぼシンクロするタイミングで地図上に位置をマーク反映することは、できています。
しかし、Webアプリでは、これを実現できません。
過去のポストにあるコードをほぼ、ことごとく試して見ましたが、どれも位置観測が1分くらいでしか行われませんでした。
どなたか、Webアプリで、なめらかな位置追跡を実現(実装)された方は、いらっしゃらないでしょうか?
ご体験など教えていただければ幸いです。
宜しくお願いします。
<script type="text/javascript"
src="http://{$MAPSAPI}/maps/api/js?sensor=true&language=ja&v=3.6"></script>
gps_watchid = navigator.geolocation.watchPosition( gps_posupdate,
gps_poserror, {
maximumAge: 30000,
enableHighAccuracy: 1
} );
JavaScript読み込み時に v=3.6 と固定して、さらに watchPosition で enableHighAccuracy:
1 を指定すると、Andoird標準のWebブラウザ(MobileSafari)でも、ステイタスバーにGPSアイコンが表示されるようになりました。
enableHighAccuracy: 1 がポイントのようです。
2011/12/20 katu <katu...@gmail.com>:
> --
> このメールは Google グループのグループ「Google-Maps-API-Japan」の登録者に送られています。
> このグループに投稿するには、google-map...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-maps-api-...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-maps-api-japan?hl=ja からこのグループにアクセスしてください。
>
--
八尋@東海大学福岡短期大学
yah...@ftokai-u.ac.jp
http://www.staff.ftokai-u.ac.jp/~yahiro/
お世話になっております。浦本@エクスファです。
ご教授通りのコーディングで、上手く通りました。
望みどおりの結果です。
これで、Webアプリケーションとして、完成させる見通しが出来ました。
今後の課題として、
1:アンドロイドFFの場合に比べ、多少ふらつく(時々観測間隔が長くなる)
2:観測結果取得後の処理が、多少混みいっておりまして、JavaScript でのスレッド処理などで、
後処理が、追跡処理の邪魔をしないよう工夫する必要がある
などです。
また、アンドロイド版はOKとして、PC版やiPad版などがあります。
経過報告は引き続きさせて頂きます。
今後ともよろしくお願いいたします。
参考にさせていただきフィックスした部分は以下のとおりです。
var position_options = {
maximumAge: 30000,
enableHighAccuracy: 1// 1秒は1000ミリ秒
};
function successCallback(position){
// 処理
}
function errorCallback(){
// 処理
}
function onDeviceReady() {
lookupGPS =
navigator.geolocation.watchPosition(successCallback,errorCallback,position_options);
}
追伸
enableHighAccuracy の値をブーランではなく数値(1or0)でしていするのは思い至りませんでした。
On 12月20日, 午前9:27, Katuhisa Uramoto <katuh...@gmail.com> wrote:
> 有益な情報、ありがとうございます。
> 早速、本日午後、試させて頂きます。
>
> いろんなPG、SE さんと出会いましたが、八尋さんのように粘り腰探求する人とは出会えません。
> 八尋さんの立場はわかりませんが、可能ならば、一緒に仕事をしてみたいところです。
>
> 2011/12/20 八尋剛規 <yah...@ftokai-u.ac.jp>
>
>
>
>
>
>
>
>
>
> > 八尋@東海大学福岡短期大学です。
>
> > <script type="text/javascript"
> > src="http://
> > {$MAPSAPI}/maps/api/js?sensor=true&language=ja&v=3.6"></script>
>
> > gps_watchid = navigator.geolocation.watchPosition( gps_posupdate,
> > gps_poserror, {
> > maximumAge: 30000,
> > enableHighAccuracy: 1
> > } );
>
> > JavaScript読み込み時に v=3.6 と固定して、さらに watchPosition で enableHighAccuracy:
> > 1 を指定すると、Andoird標準のWebブラウザ(MobileSafari)でも、ステイタスバーにGPSアイコンが表示されるようになりました。
>
> > enableHighAccuracy: 1 がポイントのようです。
>
> > 2011/12/20 katu <katuh...@gmail.com>:
> 東京都新宿区喜久井町http://www.x-fer.info
http://www.youtube.com/watch?v=ih9ZlTSvxJg
映像では説明不足と、ややミスがあるので補足しておきます。
まず、iPhoneでは問題なく動作します。
そしてAQUOS PHONE (SH12C)もiPhone 4Sと同様に1秒間に1度位置情報を取得し返してきます。また、AQUOS PHONE
もiPhone 4Sも屋内で位置が変化しない場合でも取得した結果はコールバック関数に渡されます。もし、使っているAndroid端末が
AQUOS PHONEであれば期待通りの動作になったと思います。
次にGalaxy Sです。Galaxy Sの場合、最初にGPS情報を取得できれば以後は取得した位置情報を1秒に1回の頻度で返してきます。ただ
し、位置情報に変化がない場合は、取得間隔が長くなり、やがてコールバック関数を呼び出さなくなるようです。後述するXperiaと同じです。
次にGalaxy SIIです。Galaxy SIIでは最初に一回取得したら、以後全くコールバック関数を呼び出してこないことがあります。屋外で端
末を持ち歩いても走っても同じ。ただ、GPSの取得に成功すると2秒に1度といった感じでコールバック関数が呼び出されます。ただし、Galaxy S
同様、位置に変化がないとコールバック関数が呼び出されません。屋外歩いた時は3分以上も位置が変化しないことがありました。以後に説明する
Xperiaとは異なり、最初の段階でGPSデータを取得しても数分更新されません。(何か思わぬ設定があるのかも・・・)
次にGalaxy Nexusです。これはAndroid 4を搭載しています。位置情報が取得されると2~7秒に一度コールバック関数を呼び出しま
す。どうも、全体的に動作が緩慢なのか1秒に1度といった高頻度では呼び出されない感じです。電源入れた直後であれば違うかもしれませんが、早くても2
秒程度の間隔です。Galaxy NexusもGalaxy S/SII同様に位置に変化がないとコールバック関数が呼び出されなります。
次にXperia (SO-01C)ですが、最初の段階でGPSからのデータを定期的に取得すると以後、室内でほったらかしても1秒間に1度更新されま
す。最初の時点でうまくいかないと、位置情報を返すコールバック関数がなかなか呼び出されないか、Galaxy S同様、時々呼び出される感じになりま
す。
Android Tablet (REGZA Tablet)でも試してみましたが、これはGalaxy Nexus (Android 4) と同じ
動作でした。
多分、端末20台くらい並べて車で移動しつつテストした方がいいような気がしますが、手持ちで屋内&歩行だと以下のような状況です。
(1)iPhone/AQUOS PHONE(SH-12C)は1秒間に1度位置を取得できる。屋内、屋外、位置が変化しなくてもOK
(2)Galaxy S/Xperiaは最初にGPSから定期的に位置を取得できれば、以後室内であっても1秒間に1度位置を取得できる。そうでなけれ
ば数十秒に一度か、まったく位置を返さない
(3)Galaxy SIIは最初だけ位置情報を返すが、以後は非常に長いスパンでしかコールバック関数が呼び出されない(手持ちだと3~4分に一度と
いうこともある)
(4)Galaxy Nexus/Android Tabletでは、位置情報が変化すれば2秒以上の間隔でコールバック関数を呼び出す。位置情報が変
化しない場合は呼び出さない。
Android端末によって動作が違う、という具合ですが環境によっても違うかもしれません。以下に実際のコードをアップしてあります。
http://www.openspc2.org/HTML5/test_room/geotest/
あと、enableHighAccuracy : 1もやってみましたが結果は同じでした。
より、多くのAndroid端末の動作状況を収拾した方がよいかもしれません。
よろしくお願いします。
--
このメールは Google グループのグループ「Google-Maps-API-Japan」の登録者に送られています。
このグループに投稿するには、google-map...@googlegroups.com にメールを送信してください。
このグループから退会するには、google-maps-api-...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/google-maps-api-japan?hl=ja からこのグループにアクセスしてください。