
多くの場合、モバイルアプリケーションの開発者は地図上に何かを表示する必要があります。 開発者にはどのようなオプションがありますか?
2つのオプションを検討しました。
オプション1.マップを備えた外部アプリケーション
おそらく実装が最も簡単なオプションです。 必要な場合は、マップを使用してサードパーティのアプリケーションを開くだけです
-geo:緯度、経度の形式の
URIを作成し、
zパラメーターで
スケールを
指定でき
ます (
1〜23 ):
String uri = String.format("geo:%s,%s?z=16", Double.toString(lat), Double.toString(lng)); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(intent);
同時に、マップ付きの複数のアプリケーションがユーザーのデバイスにインストールされている場合、ユーザーは特定のポイントを表示するアプリケーションを選択するよう求められます。

はい、はい。 このようにして、地図だけでなく、特定のポイントが表示されます(Yandex.Mapsは地図だけを表示しますが、私の対応から判断すると、必要であると考えています)。
このオプションの利点:
- 実装の容易さ。
- 外部アプリケーションのすべての機能(たとえば、iGoでは、表示されたポイントへの道順をすぐに取得できます。一部のアプリケーションのマップはオフラインで利用できます)。
短所:
- 追加情報を表示する方法はありません(たとえば、この記事の最初のスクリーンショット-ラベル、ツールチップなど)。
オプション2.内蔵カード
統合カードの実装はより困難です。 私はすべての詳細にこだわるつもりはありません。主なことは
ドキュメントに詳しく説明されてい
ます 。
いくつかの微妙な点だけを説明します。
Maps APIキー
内蔵カードを機能させるには、キーを取得する必要があります。 アプリケーションのデバッグバージョンとリリースバージョンでは、キーが異なるため、キーではなくキーです。
キーを毎回手動で変更しないようにするには、マップを使用して2つのレイアウトを作成し、コードに次のように記述します。
その他のオプション(アセンブリのデバッグ/リリースバージョンの決定を含む)は、
ここにあります 。
現在位置
マップ上の現在の位置を表示するには、次のように記述する必要があります。
private MyLocationOverlay myLocationOverlay; MapView mapView = (MapView) findViewById(R.id.mapview); myLocationOverlay = new MyLocationOverlay(this, mapView); myLocationOverlay.enableMyLocation(); mapView.getOverlays().add(myLocationOverlay);
アクティビティを停止/終了するときは、位置情報をオフにしてください:
myLocationOverlay.disableMyLocation();
マーカー
マーカーは単にマップに追加されます。
List<Overlay> mapOverlays; Drawable drawable; MapOverlay itemizedOverlay; mapOverlays = mapView.getOverlays(); drawable = this.getResources().getDrawable(R.drawable.map_dot_green); itemizedOverlay = new MapOverlay(drawable, mapView); GeoPoint markerPoint = new GeoPoint(lat, lng); OverlayItem overlayItem = new OverlayItem(markerPoint, "name", "description"); itemizedOverlay.addOverlay(overlayItem); mapOverlays.add(itemizedOverlay);
さらに、複数のマーカーを追加すると、同じレイヤー上のすべてのマーカーが同じになります。 マーカーを異なるものにする方法(上のスクリーンショットのように-黄色、赤、緑)? 複数のレイヤーを作成するか、SetMarkerメソッドを使用します。
int w = drawable.getIntrinsicWidth(); int h = drawable.getIntrinsicHeight(); drawable.setBounds(-w / 2, -h, w / 2, 0); overlayItem.setMarker(drawable);
最初の3行がないと、マーカーの代わりにボイドが表示されます。
wと
hの負の値を使用せず、それらを半分に分割しない場合、マーカーの影が正しくなくなります。
このオプションの長所と短所
利点:
- 独自のレイヤーとラベルを作成する機能。
- ユーザーをアプリケーションに残す機能(たとえば、ウィンドウタイトルを追加する)。
短所:
- 実装の相対的な複雑さ。
- サードパーティアプリケーションのすべての機能ではありません。
- マップを使用したアクティビティは長い間実行されています。
おわりに
その結果、ユーザーの選択ができませんでした。 したがって、
私のアプリケーションでは両方のオプションがサポートされています-設定で、ユーザーは外部アプリケーションを使用するかどうかを指定できます(デフォルトでは、組み込みカードが使用されます)。