Project Android Applications + onderzoek Google Maps API voor Android
Het doel is om gemakkelijk van het ene punt op aarde naar een ander punt gebracht te worden. Op de Google kaart vind je twee pinnen. Er wordt ook nog een lijn getrokken tussen beide punten voor in vogelvlucht uw bestemming te bereiken of via de auto gemakkelijk de kortste route te vinden.
Hier vind u twee screenshots van de kaart.
Op het eerste scherm, kan je een vertrek- en aankomstpunt ingeven. Je kan op de vergrootglazen te drukken voor uw reeds eerder ingegeven locaties terug te vinden en opnieuw in te voeren op het middelste scherm. Tenslotte kan u op het laatste scherm een nieuwe locatie invoeren. Geef de locatie in, in het tekst vak en klik op de vernieuw knop voor de locatie te bevestigen. Dit gebruikt een API van Google voor het volledig adres en de coördinaten van de locatie te bepalen.
Hieronder ziet u nog eens de fragmenten in landschap mode.
Met de navigation drawer kan je gemakkelijk gaan navigeren tussen de verschillende fragmenten.
De Google kaart werd gerealiseerd door een nieuwe 'Google Maps Acticity' toe te voegen. Hier heb ik echter een paar zaken aangepast. Ten eerste heb ik de Activity
aangepast door een Fragment
te gebruiken en de newInstance()
methode te overschrijven waardoor ik een eigen object genaamd Route
.
Vervolgens werd er in de onMapReady(GoogleMap)
code toegevoegd voor het plaatsen van de pinnen en de polygoon. Deze is als volgt opgemaakt.
if (_route != null && _route.getAankomstLocatie() != null && _route.getVertrekLocatie() != null)
{
LatLng aankomst = new LatLng(_route.getAankomstLocatie().getLatitude(), _route.getAankomstLocatie().getLongitude());
googleMap.addMarker(new MarkerOptions().position(aankomst).title("aankomst"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(aankomst));
LatLng vertrek = new LatLng(_route.getVertrekLocatie().getLatitude(), _route.getVertrekLocatie().getLongitude());
googleMap.addMarker(new MarkerOptions().position(vertrek).title("vertrek"));
googleMap.moveCamera(CameraUpdateFactory.newLatLng(vertrek));
googleMap.addPolygon(new PolygonOptions().add(aankomst, vertrek).fillColor(Color.BLUE).strokeWidth(2));
}
Hier kwam ik een paar problemen tegen.
onMapReady(GoogleMap)
methode niet uitgevoerd werd als de kaart geladen was. Door het toevoegen van onderstaande code was dit opgelost.MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment);
mapFragment.getMapAsync(RoeteActivity.this);
Voor het verkrijgen van de coördinaten op de nieuwe locatie activity, wordt er een API van Google met volgende URL:
http://maps.googleapis.com/maps/api/geocode/json?sensor=false&language=nlbe&address=graaf%20karel%20de%20goedelaan%20kortrijk
Het vette gedeelte is het ingevoerde adres op de activity. Google houd rekening met typ- en spellingfouten. De teruggekeerde JSON data wordt hierna uitgelezen, verwerkt, gestockeerd in de opslagplaats en teruggestuurd naar de activity.
De LocatieRepo
wordt gebruikt om de ingevoerde plaatsen weg te schrijven als local storage op het toestel. Voor alle locaties weg te schrijven in inlezen wordt er JSON gebruikt.