МК Полилинии разного цвета для каждой полилинии

Я борюсь за создание полилиний с разными цветами. Я анализирую точки из json и создаю полилинию между ними, но у меня возникла проблема с созданием полилиний разного цвета в зависимости от высоты, скажем на данный момент... между каждой точкой разная высота, и мне нужно показать ее другим цветом,

Здесь я получаю значения lat и lon для пункта назначения и добавляю массив положений, используемый для создания полилинии:

for point in points
{
   let lat = point[0] as? Double ?? 0.0
   let lon = point[1] as? Double ?? 0.0
   let alt = point[2] as? Double ?? 0.0


   let destination = CLLocationCoordinate2DMake(lat, lon)
   self.locations.append(destination)
}

Здесь я создаю полилинию:

func setupPolyline()
{
    DispatchQueue.main.async {
        let polyline = MKPolyline(coordinates: self.locations, count: self.locations.count)
        self.mapView.addOverlay(polyline)
        self.setVisibleMapArea(polyline: polyline, edgeInsets: UIEdgeInsets(top: 20.0, left: 20.0, bottom: 20.0, right: 20.0))
    }
}

И, конечно, делегат:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
{
    if overlay is MKPolyline
    {
        let polylineRenderer = IVBezierPathRenderer(overlay: overlay)
        polylineRenderer.strokeColor = UIColor(red: 54/255, green: 128/255, blue: 45/255, alpha: 1.0)
        polylineRenderer.lineWidth = 15.0
        polylineRenderer.alpha = 0.6

        return polylineRenderer
    }
    return MKOverlayRenderer()
}

Я просто не могу думать ни о какой идее, как подойти к этому, я думаю создать одну полилинию для цикла, где я анализирую lat и lon из json и задаю этот собственный цвет с помощью:

class CustomPolyline : MKPolyline 
{
  var color: UIColor? 
}

Таким образом, в этом примере у меня есть 196 точек, и мне нужно создать полилинии из точек, таких как 1-2, 2-3, 3-4 и т. Д., И применить разные цвета к каждой из них в зависимости от высоты (например, только 2 разных цвета alt < 240 красный или зеленый)?

В этом коде мне удалось создать полилинии от точки к одной и той же последней точке (мне нужно как минимум две), и я могу создать разные цвета для каждого, но между одинаковыми точками, но мне нужно как-то получить точку и следующую точку для Нарисуйте ломаную линию между ними, поэтому отправьте этот фрагмент, чтобы показать вам, о чем я думаю.

for point in points
{
    let lat = point[0] as? Double ?? 0.0
    let lon = point[1] as? Double ?? 0.0
    let alt = point[2] as? Double ?? 0.0

    let lastLat = lat
    let lastLon = lon

    let lastDestination = CLLocationCoordinate2DMake(lastLat, lastLon)                                                
    let destination = CLLocationCoordinate2DMake(lat, lon)
    self.locations = [lastDestination, destination]

    if alt < 240
    {
        DispatchQueue.main.async {
            let polyline = CustomPolyline(coordinates: self.locations, count: self.locations.count)
            polyline.color = UIColor.red
            self.mapView.addOverlay(polyline)
        }
    }
    else
    {
        DispatchQueue.main.async {
            let polyline = CustomPolyline(coordinates: self.locations, count: self.locations.count)
            polyline.color = UIColor.green
            self.mapView.addOverlay(polyline)
        }
    }
}

И тогда делегат:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
{
    if let polyline = overlay as? CustomPolyline
    {
        let polylineRenderer = IVBezierPathRenderer(overlay: overlay)
        polylineRenderer.strokeColor =  polyline.color
        polylineRenderer.lineWidth = 15.0
        polylineRenderer.alpha = 0.6

        return polylineRenderer
    }
    return MKOverlayRenderer()
}

Большое спасибо!!

0 ответов

Другие вопросы по тегам