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

Swift开发:如何移除追踪轨迹中的.person标记?

解决追踪应用更新轨迹时重复显示.person标记的问题

你遇到的问题应该是每次更新在线轨迹时,都会重复添加或保留.person标记对吧?我给你两种针对性的解决方案,你可以根据需求选择:

方案一:完全移除.person标记(如果不需要再显示)

如果你的需求是不再展示这个人物标记,最直接的办法就是删掉添加标记的那行代码:

private func updateOnlineTrackOnMap() { 
    let locations = self.track?.points?.map { $0.location } ?? [] 
    guard locations.count >= 2 else { return } 
    mapView.drawPolyline(withLocations: locations) 
    // 移除下面这行代码,就不会再显示.person标记了
    // mapView.setMark(.person, to: locations.last!.coordinate) 
} 

方案二:更新标记时先移除旧标记(如果需要保留最新位置的标记)

如果你的需求是只显示当前最新位置的.person标记,避免重复叠加,那需要在设置新标记前先清除之前的旧标记。假设你的mapView支持按类型移除标记,可以这样修改:

private func updateOnlineTrackOnMap() { 
    let locations = self.track?.points?.map { $0.location } ?? [] 
    guard locations.count >= 2 else { return } 
    mapView.drawPolyline(withLocations: locations) 
    
    // 先移除已存在的.person标记
    mapView.removeMark(ofType: .person)
    // 再添加最新位置的标记
    mapView.setMark(.person, to: locations.last!.coordinate) 
} 

如果你的mapView没有现成的按类型移除标记的方法,你可以自己维护一个标记引用:

// 在类内部声明一个属性保存标记引用
private var personMarker: Marker? // 这里Marker替换成你实际的标记类型

private func updateOnlineTrackOnMap() { 
    let locations = self.track?.points?.map { $0.location } ?? [] 
    guard locations.count >= 2 else { return } 
    mapView.drawPolyline(withLocations: locations) 
    
    // 移除旧标记
    if let oldMarker = personMarker {
        mapView.removeMarker(oldMarker)
    }
    // 创建并保存新标记
    personMarker = mapView.setMark(.person, to: locations.last!.coordinate) 
} 

这样就能保证每次更新轨迹时,要么完全没有.person标记,要么只显示最新位置的那一个标记啦。

内容的提问来源于stack exchange,提问作者Max Kraev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:24