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の負の値を使用せず、それらを半分に分割しない場合、マーカーの影が正しくなくなります。



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


利点:

短所:

おわりに



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



All Articles