diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0a7c56c..eb54ac7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,10 +28,10 @@
android:exported="true"
android:label="Map">
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
{
+ //受け取ったshopsに対してMarkerが立っているかを確認
+ //対応するMarkerがなければMarkerを立てる
+ for (Shop shop : shops) {
+ if (shopsViewModel.getMarker(shop) == null) {
+
+ shopLatlng = new LatLng(shop.getLatitude(), shop.getLongitude());
+ System.out.println(shopLatlng);
+ Marker createMaker = mMap.addMarker(new MarkerOptions().position(shopLatlng).title(""));
+ //マーカーに店情報を持たせる
+ createMaker.setTag(shop);
+ //ShopToMarkerに紐づけ
+ shopsViewModel.setShopAndMarker(shop, createMaker);
+ }
+ }
+
+ });
+
+// binding = ActivityMainBinding.inflate(getLayoutInflater());
+// getActivity().setContentView(binding.getRoot());
+//
+// ImageButton myPageButton = getView().findViewById(R.id.myPageButton);
+// // lambda式
+// myPageButton.setOnClickListener( v -> {
+// Log.d("debug", "myPageButton, マイページに画面遷移");
+// Intent intent = new Intent(getActivity(), MyPageActivity.class);
+// startActivity(intent);
+// });
+//
+//
+// if (ActivityCompat.checkSelfPermission(getContext(),
+// Manifest.permission.ACCESS_FINE_LOCATION)
+// != PackageManager.PERMISSION_GRANTED) {
+//
+// requestPermissionLauncher.launch(
+// Manifest.permission.ACCESS_FINE_LOCATION);
+// }
+// else{
+// locationStart();
+// }
+
+ // Obtain the SupportMapFragment and get notified when the map is ready to be used.
+// SupportMapFragment mapFragment = (SupportMapFragment) getActivity().getSupportFragmentManager()
+// .findFragmentById(R.id.map);
+// assert mapFragment != null;
+// mapFragment.getMapAsync(this);
+
+ //初期画面の座標(現在地をロードするまで表示)
+ //initialLatlng = new LatLng(39,138);
+ initialLatlng = new LatLng(nemophila.getCameraLatitude(), nemophila.getCameraLongitude());
+ //初期画面に移動
+ //mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, 15f));
+ mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(initialLatlng, nemophila.getZoom()));
+
+
+ //画面が動いたとき
+ mMap.setOnCameraIdleListener(() -> {
+ //カメラの座標とZOOM倍率を保存
+ //nowCamera = mMap.getCameraPosition();
+ nemophila.setCameraLatitude(mMap.getCameraPosition().target.latitude);
+ nemophila.setCameraLongitude(mMap.getCameraPosition().target.longitude);
+ nemophila.setZoom(mMap.getCameraPosition().zoom);
+
+ //nowLatlng = new LatLng(nowCamera.target.latitude, nowCamera.target.longitude);
+ //nowZoom = nowCamera.zoom;
+ //Shopの描画範囲を指定
+ shopsViewModel.setViewArea(nemophila.getCameraLongitude() + 1, nemophila.getCameraLatitude() + 1, nemophila.getCameraLongitude() - 1, nemophila.getCameraLatitude() - 1);
+ });
+
+ /*
+ //多分使わない
+ // タップした時のリスナーをセット
+ mMap.setOnMapClickListener(tapLocation -> {
+ // map(ピン以外)をtapされた位置の緯度経度
+ tapLatlng = new LatLng(tapLocation.latitude, tapLocation.longitude);
+ mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(tapLatlng, nowZoom));
+ shopsViewModel.setViewArea(tapLatlng.longitude+1, tapLatlng.latitude+1, tapLatlng.longitude-1, tapLatlng.latitude-1);
+ });
+ */
+
+ //長押し時に店を作成し、その座標にピンを立てる
+ //長押し時にその座標を保存し、投稿画面に移り、Shop作成完了時にはピンを立て、Shop画面に移行
+ mMap.setOnMapLongClickListener(longpushLocation -> {
+ //長押しされた位置の緯度経度を取得
+ //LatLng newlocation = new LatLng(longpushLocation.latitude, longpushLocation.longitude);
+ //Nemophilaに座標を保存
+ nemophila.setCurrentLatitude(longpushLocation.latitude);
+ nemophila.setCurrentLongitude(longpushLocation.longitude);
+ //長押しした場合は今からShopを作成するので、CurrentShopをnullで登録しておく
+ nemophila.setCurrentShop(null);
+ //ShopCreate画面に遷移
+ Intent intent = new Intent(getActivity(), ShopCreateActivity.class);
+ startActivity(intent);
+ });
+
+ // ピンをクリックした場合
+ mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
+ @Override
+ public boolean onMarkerClick(Marker marker) {
+ //店の詳細と投稿一覧を表示
+ //ここでshopActivityを呼び出す
+
+ //下からクリックしたことを通知
+ Toast.makeText(getActivity(), "ピンクリック", Toast.LENGTH_SHORT).show();
+ //選んだ店をsetする(現状はnullになっているが後で直す)
+ nemophila.setCurrentShop((Shop) marker.getTag());
+ System.out.println(nemophila.getCurrentShop().getName());
+
+ //ShopActivity画面に遷移
+ Intent intent = new Intent(getActivity(), ShopActivity.class);
+ startActivity(intent);
+
+ return false;
+ }
+ });
}
};
@@ -46,4 +210,157 @@
mapFragment.getMapAsync(callback);
}
}
+
+
+ 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);
+
+ LatLng latlng = new LatLng(latitude, longitude);
+
+ // 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, nemophila.getZoom()));
+ }
+
+ //現在地の表示
+ private void setIcon(double latitude, double longitude) {
+ //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.icon_current,null);
+ //更新前の現在地アイコンを消去
+ if (currentOverlay != null) {
+ currentOverlay.remove();
+ }
+
+ LatLng current_location = new LatLng(latitude, longitude);
+
+ // マップに貼り付ける BitmapDescriptor生成
+ BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon_current);
+ //Drawable ic_current = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_current_location,null);
+
+ // 貼り付設定
+ 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(current_location, 200f, 200f);
+
+ // マップに貼り付け・アルファを設定
+ currentOverlay = mMap.addGroundOverlay(overlayOptions);
+
+ // 透明度
+ assert currentOverlay != null;
+ currentOverlay.setTransparency(0.8F);
+ }
+
+
+ private final ActivityResultLauncher
+ requestPermissionLauncher = registerForActivityResult(
+ new ActivityResultContracts.RequestPermission(),
+ isGranted -> {
+ if (isGranted) {
+ locationStart();
+ }
+ else {
+ Toast toast = Toast.makeText(getActivity(),
+ "これ以上なにもできません", Toast.LENGTH_SHORT);
+ toast.show();
+ }
+ });
+
+ //現在地の取得
+ @SuppressLint("MissingPermission")
+ private void locationStart(){
+ Log.d("debug","locationStart()");
+
+ // LocationManager インスタンス生成
+ locationManager =
+ (LocationManager) getContext().getSystemService(getContext().LOCATION_SERVICE);
+
+ if (locationManager != null && locationManager.isProviderEnabled(
+ LocationManager.GPS_PROVIDER)) {
+
+ Log.d("debug", "location manager Enabled");
+ } else {
+ // GPSを設定するように促す
+ Intent settingsIntent =
+ new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+ startActivity(settingsIntent);
+ Log.d("debug", "not gpsEnable, startActivity");
+ }
+
+ if (ContextCompat.checkSelfPermission(getContext(),
+ Manifest.permission.ACCESS_FINE_LOCATION) !=
+ PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(getActivity(),
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
+
+ Log.d("debug", "checkSelfPermission false");
+ return;
+ }
+
+ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
+ 1000, 50, this);
+
+ }
+
+ @Override
+ public void onLocationChanged(Location location) {
+ //初期画面は現在地を中心にするため...
+ if (currentLatlng == null){
+ //↓現在地ロード後画面中心を現在地にする場合
+ //zoomMap(location.getLatitude(), location.getLongitude());
+ //ロード画面の終了
+ getView().findViewById(R.id.LL_Load).setVisibility(View.GONE);
+
+ //現在地ボタンを表示
+ getView().findViewById(R.id.currentButton).setVisibility(View.VISIBLE);
+ ImageButton button1 = getView().findViewById(R.id.currentButton);
+
+ button1.setOnClickListener( v -> {
+ Log.d("debug", "currentbutton, 現在地にカメラを移動");
+ System.out.println(shopsViewModel.getShopsLiveData().getValue());
+ //現在地にカメラを移動
+ zoomMap(currentLatlng.latitude, currentLatlng.longitude);
+ });
+ }
+
+ //現在地が変更されるたびに現在地アイコンを移動
+ //LatLng型で受け取っておく
+ currentLatlng = new LatLng(location.getLatitude(), location.getLongitude());
+
+ //現在地アイコンを表示.このsetIcon内にzoomMap処理もあるので注意
+ setIcon(location.getLatitude(),location.getLongitude());
+ }
+
+ @Override
+ public void onProviderEnabled(String provider) {
+
+ }
+
+ @Override
+ public void onProviderDisabled(String provider) {
+
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml
index 05b3440..bc32bc7 100644
--- a/app/src/main/res/layout/activity_maps.xml
+++ b/app/src/main/res/layout/activity_maps.xml
@@ -36,7 +36,65 @@
android:layout_gravity="center_horizontal"
/>
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+