You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中MKMapView绘制PolyLine时线条变粗问题求助

解决MKPolyLine路线线条粗细不一致的问题

嘿,我来帮你搞定这个路线越画越粗的问题!从你的代码来看,大概率是重复添加了PolyLine覆盖层导致的——每次调用mapp()方法时,旧的路线没有被移除,新的路线又叠加上去,重叠的部分自然就看起来更粗了。

问题根源分析

你的assigArray()方法里没有清空coordinateArray,如果这个方法被多次调用,数组里会不断累加之前的坐标点;同时mapp()方法也没有移除地图上已有的PolyLine,导致每次新增的路线都是包含所有历史点的新线,多层叠加后视觉上就变粗了。

修复方案

我们需要做两个关键修改:

1. 填充坐标数组前先清空

在assigArray()开头添加清空数组的代码,避免坐标点重复累加:

func assigArray() {
    // 先清空坐标数组,确保每次都是全新的路线点集合
    coordinateArray.removeAll()
    if self.lat.count == self.lon.count {
        for i in 0 ..< self.lat.count {
            let destination = CLLocationCoordinate2DMake(self.lat[i], self.lon[i])
            coordinateArray.append(destination)
        }
        self.mapp()
    }
}

2. 添加新路线前移除旧的PolyLine覆盖层

在mapp()方法开头,先移除地图上已有的所有PolyLine,保证地图上始终只有一条路线:

func mapp() {
    // 移除所有已存在的PolyLine覆盖层
    map.overlays.forEach { overlay in
        if overlay is MKPolyline {
            map.removeOverlay(overlay)
        }
    }
    
    let coords2 = CLLocationCoordinate2D(latitude: lat.last!, longitude: lon.last!)
    let testline = MKPolyline(coordinates: coordinateArray, count: coordinateArray.count)
    map.add(testline)
    map.delegate = self
    map.centerCoordinate = coords2
    map.region = MKCoordinateRegion(center: coords2, span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02))
}

额外提示

你的map.delegate = self最好放到视图初始化的地方(比如viewDidLoad),不需要每次调用mapp()都设置一遍,避免重复设置可能带来的潜在问题。

这样修改后,每次更新路线时都会先清理旧数据,只显示最新的一条PolyLine,整条路线的粗细就会保持统一的2.0啦!

内容的提问来源于stack exchange,提问作者Yash R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:00:27