Androidアプリケーションのマップ



多くの場合、モバイルアプリケーションの開発者は地図上に何かを表示する必要があります。 開発者にはどのようなオプションがありますか?

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は地図だけを表示しますが、私の対応から判断すると、必要であると考えています)。

このオプションの利点:
短所:

オプション2.内蔵カード


統合カードの実装はより困難です。 私はすべての詳細にこだわるつもりはありません。主なことはドキュメントに詳しく説明されています

いくつかの微妙な点だけを説明します。

Maps APIキー

内蔵カードを機能させるには、キーを取得する必要があります。 アプリケーションのデバッグバージョンとリリースバージョンでは、キーが異なるため、キーではなくキーです。
キーを毎回手動で変更しないようにするには、マップを使用して2つのレイアウトを作成し、コードに次のように記述します。
 // choose layout with correct API key if (debug) { setContentView(R.layout.map_debug); } else { setContentView(R.layout.map_release); } 

その他のオプション(アセンブリのデバッグ/リリースバージョンの決定を含む)は、 ここにあります

現在位置

マップ上の現在の位置を表示するには、次のように記述する必要があります。

 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行がないと、マーカーの代わりにボイドが表示されます。
whの負の値を使用せず、それらを半分に分割しない場合、マーカーの影が正しくなくなります。

このオプションの長所と短所

利点:
短所:

おわりに


その結果、ユーザーの選択ができませんでした。 したがって、 私のアプリケーションでは両方のオプションがサポートされています-設定で、ユーザーは外部アプリケーションを使用するかどうかを指定できます(デフォルトでは、組み込みカードが使用されます)。

Source: https://habr.com/ru/post/J123403/


All Articles