МК Полилинии разного цвета для каждой полилинии
Я борюсь за создание полилиний с разными цветами. Я анализирую точки из 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()
}
Большое спасибо!!