diff --git a/AirKoality/app/app.iml b/AirKoality/app/app.iml
index 60b7707..b101fa9 100644
--- a/AirKoality/app/app.iml
+++ b/AirKoality/app/app.iml
@@ -89,7 +89,6 @@
-
@@ -97,12 +96,10 @@
-
-
@@ -177,6 +174,7 @@
+
diff --git a/AirKoality/app/build.gradle b/AirKoality/app/build.gradle
index 328516d..177e6e2 100644
--- a/AirKoality/app/build.gradle
+++ b/AirKoality/app/build.gradle
@@ -30,6 +30,7 @@ dependencies {
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.google.android.gms:play-services-maps:16.1.0'
+ implementation 'com.google.maps.android:android-maps-utils:0.5+'
implementation 'android.arch.persistence.room:runtime:1.1.1'
implementation 'com.google.android.gms:play-services-location:16.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'
diff --git a/AirKoality/app/src/main/java/at/fhj/airkoality/model/MapClusterItem.java b/AirKoality/app/src/main/java/at/fhj/airkoality/model/MapClusterItem.java
new file mode 100644
index 0000000..749062c
--- /dev/null
+++ b/AirKoality/app/src/main/java/at/fhj/airkoality/model/MapClusterItem.java
@@ -0,0 +1,33 @@
+package at.fhj.airkoality.model;
+
+import com.google.android.gms.maps.model.LatLng;
+import com.google.maps.android.clustering.ClusterItem;
+
+public class MapClusterItem implements ClusterItem {
+
+
+ private LatLng position;
+ private String titel;
+ private String snippet;
+
+ public MapClusterItem(LatLng position, String titel, String snippet) {
+ this.position = position;
+ this.titel = titel;
+ this.snippet = snippet;
+ }
+
+ @Override
+ public LatLng getPosition() {
+ return position;
+ }
+
+ @Override
+ public String getTitle() {
+ return titel;
+ }
+
+ @Override
+ public String getSnippet() {
+ return snippet;
+ }
+}
diff --git a/AirKoality/app/src/main/java/at/fhj/airkoality/ui/fragment/MapFragment.java b/AirKoality/app/src/main/java/at/fhj/airkoality/ui/fragment/MapFragment.java
index 6d290d9..e2189e6 100644
--- a/AirKoality/app/src/main/java/at/fhj/airkoality/ui/fragment/MapFragment.java
+++ b/AirKoality/app/src/main/java/at/fhj/airkoality/ui/fragment/MapFragment.java
@@ -17,13 +17,14 @@ import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
-import com.google.android.gms.maps.model.MarkerOptions;
+import com.google.maps.android.clustering.ClusterManager;
import java.util.List;
import at.fhj.airkoality.R;
import at.fhj.airkoality.db.room.AirKoalityDB;
import at.fhj.airkoality.model.Location;
+import at.fhj.airkoality.model.MapClusterItem;
import at.fhj.airkoality.ui.activity.MeasurementActivity;
public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnInfoWindowClickListener {
@@ -31,6 +32,7 @@ public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleM
private MapView mapView;
private GoogleMap map;
private AirKoalityDB database;
+ private ClusterManager clusterManager;
@Nullable
@Override
@@ -64,15 +66,14 @@ public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleM
new Thread(() -> {
List locations = database.locationDAO().getAll();
getActivity().runOnUiThread(() -> {
- map.clear();
+ clusterManager.clearItems();
for (Location location : locations) {
- MarkerOptions markerOptions = new MarkerOptions()
- .title(location.getLocation())
- .snippet(location.getCity() + ", " + location.getCountry())
- .position(new LatLng(location.getLatitude(), location.getLongitude()));
+ MapClusterItem item = new MapClusterItem(new LatLng(location.getLatitude(), location.getLongitude()),location.getLocation(),location.getCity() + ", " + location.getCountry());
- map.addMarker(markerOptions);
+
+ clusterManager.addItem(item);
}
+ clusterManager.cluster();
});
}).start();
}
@@ -86,6 +87,10 @@ public class MapFragment extends Fragment implements OnMapReadyCallback, GoogleM
map = googleMap;
map.setOnInfoWindowClickListener(this);
enableMyLocation();
+
+ clusterManager = new ClusterManager<>(getContext(), map);
+ map.setOnCameraIdleListener(clusterManager);
+ map.setOnMapClickListener(clusterManager);
}
diff --git a/README.md b/README.md
index 4c7bdbc..c876961 100644
--- a/README.md
+++ b/README.md
@@ -92,4 +92,9 @@ Notifications benötigen immer einen Channel und Channel ID (ab Android O verfü
## 17.05.2019 - Online
-## 18.05.2019 - Online
\ No newline at end of file
+Map Fragment implementiert
+
+
+## 18.05.2019 - Online
+
+Clustering von Map Fragment um Performance der App zu optimieren -> Je nach Zoomfaktor werden MapMarker gruppiert.
\ No newline at end of file