package com.example.nemophila; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.maps.CameraUpdate; 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.BitmapDescriptor; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.GroundOverlay; import com.google.android.gms.maps.model.GroundOverlayOptions; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import com.example.nemophila.databinding.ActivityMainBinding; import java.util.Locale; public class MainActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private ActivityMainBinding binding; private LatLng latlng; private LatLng latlng2; private LatLng location; //ひとまずここは触らない @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); assert mapFragment != null; mapFragment.getMapAsync(this); } /* ここからマップに関する操作 */ /* @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //マーカー(ピン)の登録・表示方法(例) LatLng ntlab = new LatLng(34.73, 135.26); mMap.addMarker(new MarkerOptions().position(ntlab).title("Marker in ntlab")); mMap.moveCamera(CameraUpdateFactory.newLatLng(ntlab)); //カメラの移動処理方法(例) CameraUpdate cUpdate = CameraUpdateFactory.newLatLngZoom( new LatLng(34.73, 135.26), 15); mMap.moveCamera(cUpdate); } */ @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //研究室周辺の緯度経度 double latitude = 34.7308032; double longitude = 135.2630272; latlng = new LatLng(latitude, longitude); //テスト用 latlng2 = new LatLng(34.74, 135.26); // 標準のマーカー setMarker(latitude, longitude); // アイコン画像をマーカーに設定 //画像関連がわかっていないのでパス //setIcon(latitude, longitude); // camera 移動 (初期画面) mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15)); /* //多分使わない // タップした時のリスナーをセット mMap.setOnMapClickListener(tapLocation -> { // map(ピン以外)をtapされた位置の緯度経度 latlng = new LatLng(tapLocation.latitude, tapLocation.longitude); String str = String.format(Locale.US, "%f, %f", tapLocation.latitude, tapLocation.longitude); mMap.addMarker(new MarkerOptions().position(location).title(str)); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 18)); }); */ //長押し時にその座標にピンを立てる //長押し時にその座標を保存し、投稿画面に移り、投稿完了時にはピンを立てる mMap.setOnMapLongClickListener(longpushLocation -> { //長押しされた位置の緯度経度を取得 LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude); //投稿処理 //投稿が完了した場合 //ピンをその座標に立て、緯度経度をタイトルに設定 //タイトルはnullにする予定 mMap.addMarker(new MarkerOptions().position(newlocation).title(""+longpushLocation.latitude+" :"+ longpushLocation.longitude)); //ピンを立てた位置にカメラを移動 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newlocation, 18)); }); // ピンをクリックした場合 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { //店の詳細と投稿一覧を表示 //ここでshopActivityを呼び出す //下からクリックしたことを通知 Toast.makeText(MainActivity.this, "ピンクリック", Toast.LENGTH_SHORT).show(); return false; } }); } //ピンの設定 private void setMarker(double latitude, double longitude){ MarkerOptions markerOptions = new MarkerOptions(); MarkerOptions markerOptions2 = new MarkerOptions(); markerOptions.position(latlng); markerOptions.title("ntlab"); mMap.addMarker(markerOptions); //テスト用 markerOptions2.position(latlng2); markerOptions2.title(null); mMap.addMarker(markerOptions2); // ズーム zoomMap(latitude, longitude); } private void zoomMap(double latitude, double longitude){ // 表示する東西南北の緯度経度を設定 double south = latitude * (1-0.00005); double west = longitude * (1-0.00005); double north = latitude * (1+0.00005); double east = longitude * (1+0.00005); // LatLngBounds (LatLng southwest, LatLng northeast) //左下、右上 LatLngBounds bounds = LatLngBounds.builder() .include(new LatLng(south , west)) .include(new LatLng(north, east)) .build(); int width = getResources().getDisplayMetrics().widthPixels; int height = getResources().getDisplayMetrics().heightPixels; // static CameraUpdate.newLatLngBounds(LatLngBounds bounds, int width, int height, int padding) mMap.moveCamera(CameraUpdateFactory. newLatLngBounds(bounds, width, height, 0)); //ズーム処理 mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlng, 15f)); } // private void setIcon(double latitude, double longitude){ // // // マップに貼り付ける BitmapDescriptor生成 // // 画像は自分で適当に用意します。ここではmipmapから持ってきましたが // BitmapDescriptor descriptor = // BitmapDescriptorFactory.fromResource(R.drawable.droid_round); // // // 貼り付設定 // GroundOverlayOptions overlayOptions = new GroundOverlayOptions(); // overlayOptions.image(descriptor); // // // public GroundOverlayOptions anchor (float u, float v) // // (0,0):top-left, (0,1):bottom-left, (1,0):top-right, (1,1):bottom-right // overlayOptions.anchor(0.5f, 0.5f); // // // 張り付け画像の大きさ メートル単位 // // public GroundOverlayOptions position(LatLng location, float width, float height) // overlayOptions.position(latlng, 300f, 300f); // // // マップに貼り付け・アルファを設定 // GroundOverlay overlay = mMap.addGroundOverlay(overlayOptions); // // ズーム // zoomMap(latitude, longitude); // // // 透明度 // assert overlay != null; // overlay.setTransparency(0.0F); // } }