Edited at

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

More than 1 year has passed since last update.


概要

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 着手