Verslag - HeinPauwelyn/Roeteplanner GitHub Wiki

Inhoud

  1. Doel van de applicatie
  2. Werking en screenshots van de applicatie
  3. Realisatie
    1. De kaart
    2. Verkrijgen van de coördinaten
    3. Opslaan van ingevoerde plaatsen
  4. Bronmateriaal en documentatie

Doel van de applicatie

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.

Werking en screenshots van de applicatie

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.

image

Hieronder ziet u nog eens de fragmenten in landschap mode.

image

Met de navigation drawer kan je gemakkelijk gaan navigeren tussen de verschillende fragmenten.

Realisatie

De kaart

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.

image

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.

  • Het eerste probleem was dat de kaart niet wilde reageren op de acties van de gebruiker. Dit is ondertussen opgelost door de support library te negeren.
  • Ook wilde de kaart niet meer opnieuw laden als de gebruiker hem voor een tweede keer wilt weergeven. Dit is opgelost door het antwoord op deze vraag op Stack Overflow.
  • Het derde en het laatste probleem was dat de 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);

Verkrijgen van de coördinaten

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.

Opslaan van ingevoerde plaatsen

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.

Bronmateriaal en documentatie

⚠️ **GitHub.com Fallback** ⚠️