Нарисуйте многоугольник на карте MapBox в формах Xamarin - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Mapbox для Xamarin.Forms NuGet для реализации MapBox на формах Xamarin.

Но я не могу нарисовать многоугольник на карте.

Код:

Naxam.Controls.Mapbox.Forms.PolylineAnnotation polyline = null;    

           if (polyline == null)
           {
             polyline = new Naxam.Controls.Mapbox.Forms.PolylineAnnotation
             {
               HexColor = “#ff1234”,
               Width = 100
             };
           }

           // Set coordinates
           List<CompanyGeoFenceVM> cordinates = new List<CompanyGeoFenceVM>();
           var savedCordinates = Preferences.Get(“cordinates”, “”);
           if (!string.IsNullOrEmpty(savedCordinates))
           {
             cordinates = JsonConvert.DeserializeObject<List<CompanyGeoFenceVM>>(savedCordinates);
           }

           foreach (var cordinate in cordinates)
           {
             if (polyline.Coordinates == null)
             {
               polyline.Coordinates = new ObservableCollection<Naxam.Controls.Mapbox.Forms.Position>
                                           { new Naxam.Controls.Mapbox.Forms.Position(cordinate.Latitude, cordinate.Longitude) };
             }
             else
             {
               (polyline.Coordinates as ObservableCollection<Naxam.Controls.Mapbox.Forms.Position>)
                           .Add(new Naxam.Controls.Mapbox.Forms.Position(cordinate.Latitude, cordinate.Longitude));
             }

           }
           List<Naxam.Controls.Mapbox.Forms.PolylineAnnotation> polylineAnnotations = new List<Naxam.Controls.Mapbox.Forms.PolylineAnnotation>();
           polylineAnnotations.Add(polyline);

           //show polygon
           map.Polylines = polylineAnnotations;


         map.ZoomLevel = Device.RuntimePlatform == Device.Android ? 8 : 10;


         Xamarin.Forms.Maps.Position position = await NexgenGeocoder.ReverseGeocode(Preferences.Get(“address”, “”));
         map.Center = new Naxam.Controls.Mapbox.Forms.Position(position.Latitude , position.Longitude);

Здесь я пытаюсь добавить многоугольник. кординат - переменная, в которой имеются данные, необходимые для обработки.пожалуйста, помогите мне в этом.Спасибо.

1 Ответ

0 голосов
/ 23 мая 2019

Включен пакет Nuget Naxam и нанесен полигон с помощью полилинии.Наконец, необходимо добавить пользовательскую строку для заполнения области полилинии.

 Naxam.Controls.Mapbox.Forms.PolylineAnnotation polyline = null;
 ObservableCollection<Naxam.Controls.Mapbox.Forms.Annotation> annotations;


 annotations = new ObservableCollection<Naxam.Controls.Mapbox.Forms.Annotation>();

//Add Polygon
        if (polyline == null)
        {
          polyline = new Naxam.Controls.Mapbox.Forms.PolylineAnnotation
          {
            Id = "my_polyline",
            Title = "Polygon",
            HexColor = "#ff1234",
            Width = 1
          };
        }

        foreach (var cordinate in cordinates)
        {
          if (polyline.Coordinates == null)
          {
            polyline.Coordinates = new ObservableCollection<Naxam.Controls.Mapbox.Forms.Position>
                        { new Naxam.Controls.Mapbox.Forms.Position(cordinate.Latitude, cordinate.Longitude) };
          }
          else
          {
            (polyline.Coordinates as ObservableCollection<Naxam.Controls.Mapbox.Forms.Position>)
                          .Add(new Naxam.Controls.Mapbox.Forms.Position(cordinate.Latitude, cordinate.Longitude));

          }
        }

//We are using polylines so we have to add ending point to line.
        if (polyline.Coordinates != null)
          (polyline.Coordinates as ObservableCollection<Naxam.Controls.Mapbox.Forms.Position>)
                          .Add(new Naxam.Controls.Mapbox.Forms.Position(cordinates[0].Latitude, cordinates[0].Longitude));

       annotations.Add(polyline);

  mapview.Annotations = annotations;
...