Mapy Google i dodawanie markerów czy moja metoda jest dobra?

0

Witam. Mam całą masę pytań ale zacznę od tego. Piszę aplikację z mapami Google i zaznaczonymi na niej lokalizacjami. Stworzyłem klasę obiektu o nazwie lokalizacja:

class Lokalizacja
{
        private string nazwa;
        private double dlugoscGEO;
        private double szerokoscGEO;

public Lokalizacja(string nazwa, double szerokoscGEO, double dlugoscGEO)
{
        this.nazwa = nazwa;
        this.dlugoscGEO = dlugoscGEO;
        this.szerokoscGEO = szerokoscGEO;
}

public string Nazwa
{
       get { return nazwa; }
}
public double DlugoscGEO
{
       get { return dlugoscGEO; }
}
public double SzerokoscGEO
{
       get { return szerokoscGEO; }
}       

W ten sposób tworzę listę lokalizacji używając JavaList:

private JavaList<Lokalizacja> GetFullListLocalization()
{
fullList.Add(new Lokalizacja("Paryż", 44.661, 0.073));
fullList.Add(new Lokalizacja("Amsterdam", 52.374, 4.895));
}

A tak dodaję listę do mapy:

fullList = GetFullListLocalization();
          
foreach (Lokalizacja p in fullList)
{
        MarkerOptions mrk = new MarkerOptions();
        mrk.SetPosition(new LatLng(p.SzerokoscGEO, p.DlugoscGEO));
        mrk.SetTitle(p.Nazwa);       
        map.AddMarker(mrk);       
}

 map.UiSettings.ZoomControlsEnabled = true;
 map.UiSettings.CompassEnabled = true;
 map.MoveCamera(CameraUpdateFactory.ZoomOut());
 map.SetInfoWindowAdapter(this);
 map.SetOnInfoWindowClickListener(this);

Napisałem cos takiego aby wyświetlić informacje wybranego markera na mapie ponieważ za bardzo nie wiem jak mam to zrobić:

 public View GetInfoWindow(Marker marker)
{
            View view = LayoutInflater.Inflate(Resource.Layout.window_marker_info, null, false);

            var a = new string(marker.Id.Where(x => char.IsDigit(x)).ToArray());
            int x = int.Parse(a);

            item = fullList[x];

            view.FindViewById<TextView>(Resource.Id.textView1).Text = item.Nazwa;

            return view;          
 }

Napisałem taki dziwny kod ponieważ nie wiem jak odwołać się do wybranego markera i użyłem takiego sposobu ale jest on nie praktyczny gdyż po użyciu funkcji map.Clear();
Markery zostają usunięte ale po ponownym ich dodaniu zmieniają one swój Id którego już nie mogę przypisać w ten sposób:

var a = new string(marker.Id.Where(x => char.IsDigit(x)).ToArray());
int x = int.Parse(a);
item = fullList[x];

Moja pierwsza prośba o to jak mam się odwołać poprawnie do markerów ponieważ chce zrobić ich dwa rodzaje i jakby filtr do wyboru które mają się wyświetlać.
A druga prośba to używam pętli do dodania markerów a jak mam je usunąć z mapy odwołując się do konkretnego markera?

1

Musisz ustawić markerom jakieś Tag czy Id, nie pamiętam co tam jest ale chyba jest jakie pole, które można wykorzystać do identyfikacji.

0

@jacek.placek: Widziałem że w javie to robią używając marker.Tag ale niestety w c# nie mogłem znaleźć tej opcji.

0

Klasa Marker ma pole Tag.
Rozumiem, że to Xamarin a ja się na tym nie znam, ale jeśli klasa Marker nie jest odpowiednia to spróbuj zrobić klasę dziedziczącą po MarkerOptions.

0

@jacek.placek: Nie bardzo wiem jak się za to zabrać.

1

A nie wystarczy zrobić map.AddMarker(mrk).Tag = "cośam", bo zdaje się, że AddMarker zwraca właśnie dodany Marker? Tag jest w Marker, ale nie w MarkerOptions.

0

Udało mi się to ogarnąć. Zrobiłem to w taki sposób dodając tag.

int i = 0;

            foreach (Lokalizacja p in fullList)
            {

                Marker m = map.AddMarker(new MarkerOptions().SetPosition(new LatLng(p.SzerokoscGEO, p.DlugoscGEO)).SetTitle(p.Nazwa).SetSnippet(p.Opis).SetIcon(p.Marker_color));
                m.Tag = i;
                i++;
            }

Potem tak przypisuję:

item = fullList[(int)marker.Tag];

Cały dzień nad tym siedziałem :D Dzięki za pomoc. Można post oznaczyć jako zaakceptowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1