每个折线的MKPolyline颜色不同

时间:2019-02-04 14:05:29

标签: ios swift polyline mkpolyline mkpolygon

我正在努力制作具有不同颜色的折线。我正在解析json中的点并在它们之间创建折线,但是我遇到了一个问题,即根据海拔高度创建具有不同颜色的折线……此刻……在每个点之间是不同的高度,我需要用不同的颜色来显示它

在这里,我将lat和lon作为目标,并将其追加到用于创建折线的locations数组:

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

我只是想不出如何解决这个问题,我正在考虑在for循环中创建一条折线,在该循环中我解析json中的lat和lon并使用以下方式提供自定义颜色:

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 个答案:

没有答案