我正在努力制作具有不同颜色的折线。我正在解析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()
}
非常感谢您!