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