使用纬度和经度在地图视图上绘制特定位置

Plotting a Specific Location on map view with latitude and longitude

我想在地图上绘制一个具有来自 api 的纬度和经度的特定点。

程序流程:

  1. 从 api 获取 LAT 和 LON(完成)
  2. 每隔 5 秒通过计时器再次 Ping api 以获取最新位置(完成)
  3. 在地图上使用检索到的 LAT 和 LON 绘制位置

问题是网络上的每个代码都与 2 个点有关,即用户位置和目标位置。如果没有用户 loc,我似乎无法让它工作。然而,我已经对此进行了编码以绘制位置。但是,当我触摸地图时,地图会缩小。另一个问题是当我得到另一个点时,前一个点也保留在屏幕上。 (出于测试目的,我对纬度和经度进行了硬编码,但是当我连接刷新的 api 代码时,先前的点仍然存在并且地图代码与此相同。纬度和经度是通过 createAnnotation 中的 func 参数传递的( ))

我的代码:

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self // or connect in storyboard
        createAnnotation()
    }

    func createAnnotation(){
        let annotations = MKPointAnnotation()
        annotations.coordinate = CLLocationCoordinate2D(latitude: 41.87369, longitude: -87.813293)
        mapView.addAnnotation(annotations)
    }}


如何正确绘制坐标?然后删除之前的并显示新的?

关于“之前的还留在屏幕上”的问题:如果你不想继续添加新的注释,就不要继续创建新的注释并调用addAnnotation。相反,保留您添加的注释,稍后使用其坐标 属性 移动它。可能是这样的:

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    var annotationForThing: MKPointAnnotation?    
    var coordinateOfThing: CLLocationCoordinate2D? {
       didSet {
           guard let newCoord = coordinateOfThing else {
               if let existing = annotationForThing {
                   mapView.removeAnnotation(existing)
               }
               return
           }
           if let existing = annotationForThing {
                existing.coordinate = coordinateOfThing
           }
           else {
               let newAnnotation = MKPointAnnotation()
               newAnnotation = coordinateOfThing
               mapView.addAnnotation(newAnnotation)
               annotationForThing = newAnnotation
           }
       }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self // or connect in storyboard
    }