МК Полилинии разного цвета для каждой полилинии - PullRequest
0 голосов
/ 04 февраля 2019

Я борюсь за создание полилиний с разными цветами.Я анализирую точки из 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 красный или зеленый)? </p>

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

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()
}

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

...