Google Mapの地図上でタップした位置に移動しマーカーを追加してみましょう。基本のGoogle Mapにタップのリスナーや長押しでのリスナーを追加するだけです。
2021.2.1
OnMapClickListener
>Google Maps Activity を選択してプロジェクトを作成すれば、ほとんど出来上がっています。API キーをセットしてください
Google Map Activity で地図を表示
あとは、OnMapClickListenerのリスナーをセットするだけです。
長押しの場合はOnMapLongClickListenerを使います。
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
//package your.package.name import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.example.testgmaptapmarker.databinding.ActivityMapsBinding import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.SupportMapFragment import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.MarkerOptions import java.util.* class MapsActivity : AppCompatActivity(), OnMapReadyCallback { private lateinit var mMap: GoogleMap private lateinit var binding: ActivityMapsBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMapsBinding.inflate(layoutInflater) setContentView(binding.root) // Obtain the SupportMapFragment and get notified when the map is ready to be used. val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this) } /** * Manipulates the map once available. * This callback is triggered when the map is ready to be used. * This is where we can add markers or lines, add listeners or move the camera. In this case, * we just add a marker near Sydney, Australia. * If Google Play services is not installed on the device, the user will be prompted to install * it inside the SupportMapFragment. This method will only be triggered once the user has * installed Google Play services and returned to the app. */ override fun onMapReady(googleMap: GoogleMap) { mMap = googleMap // 皇居辺りの緯度経度 // 皇居辺りの緯度経度 var location = LatLng(35.68, 139.76) // marker 追加 // marker 追加 mMap.addMarker(MarkerOptions().position(location).title("Tokyo")) // camera 移動 // camera 移動 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 10f)) // タップした時のリスナーをセット mMap.setOnMapClickListener { tapLocation: LatLng -> // tapされた位置の緯度経度 location = LatLng(tapLocation.latitude, tapLocation.longitude) val str: String = java.lang.String.format( Locale.US, "%f, %f", tapLocation.latitude, tapLocation.longitude ) mMap.addMarker(MarkerOptions().position(location).title(str)) mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(location, 14f)) } // 長押しのリスナーをセット mMap.setOnMapLongClickListener { longpushLocation: LatLng -> val newlocation = LatLng(longpushLocation.latitude, longpushLocation.longitude) mMap.addMarker( MarkerOptions().position(newlocation) .title("" + longpushLocation.latitude + " :" + longpushLocation.longitude) ) mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newlocation, 14f)) } } } |
local.propertiesに記述
1 2 3 4 5 |
## This file is automatically generated by Android Studio. ... sdk.dir=C\:\\Users\\akira\\AppData\\Local\\Android\\Sdk MAPS_API_KEY=AIzaISyBC4N47_xxxxxxxxxxxxxxxxxxxHiRwU |
AndroidManifest.xml のYOUR_API_KEY を{MAPS_API_KEY}に置き換え
1 2 3 |
<meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" /> |
実行して、タップをするとマーカーが追加されるのが分かります。
関連ページ:
- Google Map API キー取得
- Google Map Activity で地図を表示
- Google Map ズームとピンをアイコン画像に変更
- Google Map マーカーの追加
References:
API キーの取得 | Google Maps Android API | Google Developers
スタートガイド | Google Maps Android API | Google Developers
GitHub の Google マップ リポジトリ
Google Maps Android API – Google Developers
OnMapReadyCallback | Google APIs for Android | Google Developers