使用纬度和经度在地图视图上绘制特定位置
Plotting a Specific Location on map view with latitude and longitude
我想在地图上绘制一个具有来自 api 的纬度和经度的特定点。
程序流程:
- 从 api 获取 LAT 和 LON(完成)
- 每隔 5 秒通过计时器再次 Ping api 以获取最新位置(完成)
- 在地图上使用检索到的 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
}
我想在地图上绘制一个具有来自 api 的纬度和经度的特定点。
程序流程:
- 从 api 获取 LAT 和 LON(完成)
- 每隔 5 秒通过计时器再次 Ping api 以获取最新位置(完成)
- 在地图上使用检索到的 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
}