11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidアプリのgeoインテント対応状況

Last updated at Posted at 2018-04-21

#概要
Androidアプリのgeoインテント対応状況を調べてメモしてます。

geoインテントに対応するアプリは多いにもかかわらず、対応することを明示しているアプリは少なく、またgeoインテントの仕様解釈もアプリによってまちまちです。
しかしながら対応するアプリについて横断的な資料がないので書き残しておきます。

#geoインテント
地理座標を表現したURLのようなものをgeo URI(以降縮めてgeoURI)と呼ぶ。
http://...のリンクを開くとブラウザがWEBサイトを開くように、geo:...のgeoURIを受け付けるアプリがそこに記載された座標で地図を開いたりする。
例: geo:35.660411,139.729265

そのgeoURIをアプリに送り付ける為のインテントをgeoインテントと称する。

geoインテントの発行処理自体は簡単で、Activityの中から以下の1行で試すことができる:

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("geo:35.660411,139.729265")));

あるいはadbから手動で発行することができる:

adb shell am start -a android.intent.action.VIEW -d "geo:35.660411,139.729265"

##geoURIフォーマット
多くのアプリで採用されている、Googleマップでの実装仕様を次に示す。

  • 基本書式: geo:[lat,lng][?param[&param]...]
    • lat,lng: 緯度,経度
    • param:
      • z=zoom …ズームを指定する
      • q=lat,lng …座標にピンを立てる
      • q=lat,lng(label) …座標に名前付きピンを立てる
      • q=query …検索文字列を元に位置を検索する
    • zoomは実数でも受け付ける。ただし、他のアプリでは小数部を含む場合に動作しないものが多いので注意が必要
    • q=... で位置情報を供給する場合、geo: 直後のlat,lngは 0,0 または空文字列に省略できる
      • ただしその場合z=zoomは無視される
    • q=... で供給される文字列はURIエンコードされている必要がある
      • uri=Uri.encode(uri);
      • テストで試すくらいなら半角英数字そのまま書いても問題ない

q= は意味合い的には「場所の推定の為の情報」といったところで、地図の表示座標の提供自体は geo:lat,lng の部分が担っているはずだけど、事実上は上のように実装されている

###Googleマップでの動作例
Ver 9.76.0

書式 動作 備考
geo:lat,lng lat,lngの位置の地図を表示 ピンは立たない
geo:lat,lng?z=zoom lat,lngの位置の地図をズームレベルzoomで表示 ピンは立たない
geo:0,0?q=lat,lng lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) lat,lngの位置に名前付きのピンを立てて地図を表示 古いGoogleマップアプリ(~Ver6.x)では複数の候補地に同時にピンが立つ
geo:lat,lng?q=lat,lng(label)&z=zoom lat,lngの位置に名前付きのピンを立ててズームレベルzoomで地図を表示 ただしピンが立った時点で自動で既定のズームレベルに遷移する
geo:lat,lng?q=query queryを元に座標周辺の複数プレイスを検索 複数ピンを立てて地図に表示。zoomをつけても無視
geo:0,0?q=query queryを元に現在位置周辺の複数プレイスを検索 複数ピンを立てて地図に表示。zoomをつけても無視
  • 0,0 は省略しても動作する
  • zoomは実数(=小数点を含む値)も受け付ける

##資料

#geoインテントを発行できるアプリ
どのアプリが発行機能を持つかは、明示されていない限り実際に操作してみなければわからない。
geoURIの内容は、インテント発行時にLogCatを睨んでいれば確認できる。
著者が確認したものは次の通り:

##OsmAnd
Ver 2.9.3

フォーマット:

  • geo:lat,lng?z=zoom

発行方法:

  • 地点を選択→[共有]→[geo:]

備考

  • zoomは整数

##地図ロイド
Ver 15.21-VR

フォーマット:

  • geo:0,0?q=lat,lng&z=zoom

発行方法:

  • [この場所について]→[共有,印刷]→[マップを起動]

備考:

  • zoomは整数

##ロケスマ
Ver 3.4.4

フォーマット

  • geo:lat,lng?q=lat,lng

発行方法:

  • ピンをタップ→ナビ起動ボタン→[その他のナビアプリ連携]

##UnwiredMaps
Ver 1.22

フォーマット:

  • geo:lat,lng?z=zoom

発行方法:

  • 位置メニューを実行

備考:

  • zoomは整数

##Map2Geo
Ver 3.12

フォーマット:

  • geo:lat,lng?q=lat,lng(lable)&z=zoom
  • geo:lat,lng?q=lat,lng&z=zoom
  • geo:lat,lng?z=zoom
  • geo:lat,lng

発行方法:

  • 地図アプリの共有から[他の地図へ転送]→geoインテントを受け付けるアプリを選択

備考:

  • zoomは整数または実数
  • 送信先アプリに応じてgeoURIが変更される

#geoインテントを受け付けるアプリ
adb shell am start -d "geo:0.0" でインテントを発行して、反応するアプリ一覧を調べることができる。

著者が確認したものは次の通り:

##Googleマップ
Ver 9.76.0

geoURIフォーマットの項を参照のこと。

##Google Earth
Ver 9.2.10.2

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置の地図を目いっぱいのズームで表示 ピンは立たない
geo:lat,lng?z=zoom OK lat,lngの位置の地図をズームレベルzoomで表示 ピンは立たない
geo:0,0?q=lat,lng NG おそらく検索は行われているが検索ワードがlat,lng
geo:0,0?q=lat,lng(label) NG おそらく検索は行われているが検索ワードがlat,lng(label)
geo:lat,lng?q=lat,lng(label)&z=zoom NG おそらく検索は行われているが検索ワードがlat,lng(label)
geo:lat,lng?q=query OK queryを元に表示位置付近の複数プレイスの検索→繰り返すと現在地付近の検索 複数のピンが立つ。座標は無視。zoomをつけても無視
geo:0,0?q=query OK queryを元に表示位置付近の複数プレイスの検索→繰り返すと現在地付近の検索 複数のピンが立つ。zoomをつけても無視

##Waze
Ver 4.37.0.6

書式 処理 動作 備考
geo:lat,lng OK 現在地からのルート検索開始 ピンが立つ
geo:lat,lng?z=zoom OK 現在地からのルート検索開始 ピンが立つ。zoomは無視
geo:0,0?q=lat,lng OK 現在地からのルート検索、または経由地追加 ピンが立つ
geo:0,0?q=lat,lng(label) OK labelを元に現在地付近の場所の検索→ルート検索、または経由地追加 検索結果位置にピンが立つ。座標は無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK 現在地からのルート検索開始 ピンが立つ。labelは無視
geo:lat,lng?q=query OK 現在地からのルート検索開始 ピンが立つ。queryは無視
geo:0,0?q=query OK queryを元に現在地付近の場所の検索→ルート検索、または経由地追加 検索結果位置にピンが立つ

##Y!マップ
Ver 6.12.0

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示
geo:0,0?q=lat,lng NG
geo:0,0?q=lat,lng(label) NG
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lng,zoomに応じた範囲でlabelを元に複数プレイスを検索 複数のピンを立てて地図表示
geo:lat,lng?q=query OK lat,lng,デフォルトのzoomに応じた範囲でqueryを元に複数プレイスを検索 複数のピンを立てて地図表示
geo:lat,lng?q=query&z=zoom OK lat,lng,zoomに応じた範囲でqueryを元に複数プレイスを検索 複数のピンを立てて地図表示
geo:0,0?q=query NG
  • zoomは実数不可。小数点を含む場合無視される

##Y!カーナビ
Ver 2.5.2

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng NG 検索が実行されるが失敗する
geo:0,0?q=lat,lng(label) NG 検索が実行されるが失敗する
geo:lat,lng?q=lat,lng(label)&z=zoom NG 検索が実行されるが失敗する
geo:lat,lng?q=query OK 現在の表示位置、ズームに応じた範囲でqueryを元に複数プレイスを検索 複数のピンを立てて地図表示。座標は無視。zoomをつけても無視
geo:0,0?q=query OK 現在の表示位置、ズームに応じた範囲でqueryを元に複数プレイスを検索 複数のピンを立てて地図表示。zoomをつけても無視

##NAVITIME
Ver 3.45.0

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置にピンを立てて地図を表示,場所名にlabel適用 地点詳細表示が展開される
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立てて地図を表示,場所名にlabel適用 地点詳細表示が展開される,zoomは無視
geo:lat,lng?q=query OK lat,lngの位置にピンを立てて地図を表示,場所名にquery適用 地点詳細表示が展開される
geo:0,0?q=query OK queryでの検索結果一覧画面が表示される

##auナビウオーク
Ver8.39.5

  • NAVITIMEと同じ動作

##NAVITIMEカーナビ
Ver 3.19.5

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置を選択状態で地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置を選択状態で地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置を選択状態で地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置を選択状態で地図を表示 labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置を選択状態で地図を表示 label,zoomは無視
geo:lat,lng?q=query OK queryでの検索結果一覧画面が表示される lat,lngは無視,日本全域での検索が行われる
geo:0,0?q=query OK queryでの検索結果一覧画面が表示される 日本全域での検索が行われる

##auカーナビ
Ver 3.18.1

  • NAVITIMEカーナビと同じ動作

##NAVITIMEドライブサポーター
Ver 6.26.0

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置にピンを立てて地図を表示 labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立てて地図を表示 label,zoomは無視
geo:lat,lng?q=query OK lat,lngの位置にピンを立てて地図を表示 queryは無視
geo:0,0?q=query OK queryでの検索結果一覧画面が表示される エリア指定なしでの検索が行われる

##NAVITIMEトラックカーナビ
Ver 4.1.0

  • NAVITIMEドライブサポーターと同じ動作

##au助手席ナビ
Ver 6.10.3

  • NAVITIMEドライブサポーターと同じ動作
  • 以前のバージョンではz=zoomがないとgeoURIを受け付けられなかった

##いつもNAVI
Ver 5.0.1

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示 地名に住所が充てられる
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 地名に住所が充てられる,zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示 地名が「ココ」になる
geo:0,0?q=lat,lng(label) OK lat,lngの位置にピンを立てて地図を表示 地名にlabelが充てられる
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立てて地図を表示 地名にlabelが充てられる,zoomは無視
geo:lat,lng?q=query OK lat,lngの周辺10km内をqueryで検索、結果に複数ピンを立ててトップの位置の地図を表示 zoomをつけても範囲不変
geo:0,0?q=query OK 最後にgeoインテントで指定された位置の周辺10kmをqueryで検索

##ドコモ地図アプリ
Ver 1500.01.2

  • アプリ自体が起動できたためしがないので検証不能

##ナビロー
Ver v2.2.8.0

  • サービス終了後に起動できなくなっており検証不能

##地図ロイド
Ver 15.21-VR

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示 地名に座標値が充てられる
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示 地名に座標値が充てられる
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示 地名に座標値が充てられる
geo:0,0?q=lat,lng(label) OK lat,lngの位置にピンを立てて地図を表示 地名にlabelが充てられる
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示 地名に座標値が充てられる,labelは無視
geo:lat,lng?q=query OK lat,lngの位置にピンを立てて地図を表示 地名に座標値が充てられる,queryは無視,z=zoom付加も有効
geo:0,0?q=query OK queryで地名を検索、結果位置に1本のピンを立てて地図を表示 地名は検索結果から充てられる,z=zoom付加も有効

##UnwiredMaps
Ver 1.22

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置の地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置の地図をズームレベルzoomで表示
geo:0,0?q=lat,lng OK lat,lngの位置の地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置の地図を表示
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置の地図をズームレベルzoomで表示 labelは無視
geo:lat,lng?q=query OK lat,lngの位置の地図を表示 queryは無視,z=zoom付加も有効
geo:0,0?q=query NG
  • ピンの概念はない
  • コールドスタート時にはzoomが無視される

##Map2Geo
Ver 1.32

  • 受け取ったgeoURIの座標、ズームレベル、ラベルを他のアプリに適したフォーマットのインテントに変換して転送する

##Geo2QR
Ver 1.00

  • 受け取ったgeoURIをそのままQRコードにして表示する
  • geoURIの妥当性については検証されない

##Geo2Clip
Ver 1.00

  • 受け取ったgeoURIの座標部分をlat,lngの文字列にしてクリップボードにコピーする
  • geo:に続く座標とq=に続く座標が存在する場合、q=の方が優先される

##Yandex.Maps
Ver 7.4

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示
geo:0,0?q=lat,lng NG
geo:0,0?q=lat,lng(label) NG
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示 labelは無視
geo:lat,lng?q=query OK lat,lngの位置にピンを立てて地図を表示 queryは無視,z=zoom付加も有効
geo:0,0?q=query OK 表示中の地図範囲をqueryで検索、結果一覧をリスト表示 z=zoom付加は無視
  • 0,0の省略不可

##百度地図
Ver 10.6.5

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置にlabelを名前とするピンを立てて地図を表示
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にlabelを名前とするピンを立てて地図を表示 zoomは無視
geo:lat,lng?q=query OK lat,lngの位置にqueryを名前とするピンを立てて地図を表示
geo:0,0?q=query OK 表示中の地図範囲周辺をqueryで検索、結果一覧をリスト表示 z=zoom付加は検索ワードに追記されるので不可
  • 0,0の省略不可。省略すると現在地の地図が表示される、または表示位置変化なし

##MAPS.ME
Ver 8.1.3-Google

書式 処理 動作 備考
geo:lat,lng OK? lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK? lat,lngの位置にピンを立ててズームレベルzoomで地図を表示
geo:0,0?q=lat,lng OK? lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK? lat,lngの位置にピンを立てて地図を表示 labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK? lat,lngの位置にピンを立ててズームレベルzoomで地図を表示 labelは無視
geo:lat,lng?q=query OK? lat,lngの位置にピンを立てて地図を表示 queryは無視,z=zoom付加も有効
geo:0,0?q=query NG
  • 同じ場所を繰り返し指定するとピンの状態がトグルする。実用上問題あり
  • zoom指定がない場合はデフォルトのズームレベルが適用される

##OsmAnd
Ver 2.9.3

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置にlabelを名前とするピンを立てて地図を表示
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立てて地図を表示 label,zoomは無視,zoomなしならlabel有効
geo:lat,lng?q=query OK lat,lngの位置にピンを立てて地図を表示 queryは無視
geo:0,0?q=query OK 検索画面でqueryを検索
  • zoomは実数不可。位置検索に失敗する
  • q=...の後に別パラメータがあるとラベルを認識しない

##Magic Earth
Ver 7.1.18.12.FEFB4315.8FB29E8D

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置にピンを立てて地図を表示 labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置にピンを立ててズームレベルzoomで地図を表示 labelは無視
geo:lat,lng?q=query OK 地図表示位置近傍をqueryで検索してピン1つを立てて地図を表示 lat,lngは無視
geo:0,0?q=query OK 地図表示位置近傍をqueryで検索してピン1つを立てて地図を表示

##Sygic
Ver 17.3.23

書式 処理 動作 備考
geo:lat,lng OK? lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK? lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng NG
geo:0,0?q=lat,lng(label) NG
geo:lat,lng?q=lat,lng(label)&z=zoom OK? lat,lngの位置にピンを立てて地図を表示 zoom,labelは無視
geo:lat,lng?q=query OK? lat,lngの位置にピンを立てて地図を表示 queryは無視
geo:0,0?q=query NG
  • 同じ場所を繰り返し指定するとピンの状態がトグルする。実用上問題あり

##mapstr
Ver 1.6.12

書式 処理 動作 備考
geo:lat,lng NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない
geo:lat,lng?z=zoom NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない
geo:0,0?q=lat,lng NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない
geo:0,0?q=lat,lng(label) NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない,labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない,labelは無視
geo:lat,lng?q=query NG lat,lngの位置のブックマーク画面表示 コールドスタートでしか機能しない,queryは無視
geo:0,0?q=query NG

##Uber
Ver 4.206.10002

  • アプリが起動するだけで何のアクションも生じない

##Neshan
Ver 4.7.2

書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom NG
geo:0,0?q=lat,lng NG
geo:0,0?q=lat,lng(label) NG
geo:lat,lng?q=lat,lng(label)&z=zoom NG
geo:lat,lng?q=query NG
geo:0,0?q=query NG

#geoインテント変種を受け付けるアプリ
##地図マピオン
Ver 4.12.3

  • 以前のバージョンではlatとlngの並び順が他の多くのアプリに対して逆となっていた
    • そのため現在のバージョンでも日本国内の範囲ではlat,lngが逆でも動作する
    • 古いバージョンの地図マピオンに対してgeoインテントを送るのであれば、lat,lngを逆にする必要がある
書式 処理 動作 備考
geo:lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:lat,lng?z=zoom OK lat,lngの位置にピンを立てて地図を表示 zoomは無視
geo:0,0?q=lat,lng OK lat,lngの位置にピンを立てて地図を表示
geo:0,0?q=lat,lng(label) OK lat,lngの位置をピンを立てて地図を表示 labelは無視
geo:lat,lng?q=lat,lng(label)&z=zoom OK lat,lngの位置をピンを立てて地図を表示 label,zoomは無視
geo:lat,lng?q=query OK lat,lngの位置をピンを立てて地図を表示 queryは無視
geo:0,0?q=query NG
  • zoomは無視され、常に既定の値が適用される
  • geo:0,0 を使用した場合、以前のバージョンではピンは立っても地図は移動しなかった

##Neshan

2018年7月時点で以下の仕様は正しく動作しなくなっており、通常のgeoインテントを受け付けるようになっています。

  • 以下のURIで動作している(ただしzoom,labelは無視される):
    • geo://lat,lng
    • geo://lat,lng?q=lat,lng(label)
    • geo://lat,lng?q=lat,lng(label)&z=zoom
    • geo://lat,lng?z=zoom
  • 暗黙的インテントでは受け付けていない
    • 明示的に次の対象にインテントを送る必要がある:
      • package=org.rajman.neshan.traffic.tehran.navigator
      • class=org.rajman.neshan.ui.activity.MainActivity
  • geo://... の書式である必要がある

#更新履歴

  • 2018.4.23 脱稿
  • 2018.4.21 着手
11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?