使用保存在核心数据中的坐标在地图视图上绘制
Using coordinates saved in Core Data to draw on a mapview
我有一个存储在 Core Data 中的坐标列表,以及它们的保存时间,格式如下:
游戏 - 整数 16
纬度 - 双精度
经度 - 双精度
时间 - 日期
我已经成功地获取了用户的位置并将其存储在核心数据中,但我无法检索它并将其显示在地图上。我曾尝试寻找合适的教程,但找不到任何结合查询的核心数据和 MKPolyline 方面的内容。总的来说,我对编码还很陌生,我不能完全对齐两者。
所以,我知道以下代码将帮助我在地图上绘图:
var coordinates = locations.map({ (location: CLLocation) ->
CLLocationCoordinate2D in
return location.coordinate
})
var polyline = MKPolyline(coordinates: &coordinates,
count: locations.count)
我的代码中已经有了这个来获取核心数据:
@IBOutlet weak var mapView: MKMapView!
var locationsList: [Locations] = []
var contextMap = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var requestMap = NSFetchRequest(entityName: "Locations")
let predMap = NSPredicate(format: "game = %d", gameNumber)
requestMap.predicate = predMap
requestMap.sortDescriptors = [NSSortDescriptor(key:"time", ascending: false)]
self.locationsList = context.executeFetchRequest(requestMap, error: nil)! as [Locations]
但我不能为了从 Core Data 获取我的坐标并将它们放在地图上而将两者结合起来。
任何帮助都会很棒 - 谢谢。
您已经有了一个 CLLocation
坐标数组并构建了一个 MKPolyline
。目前一切正常。
现在您需要告诉 MKMapView
在地图上绘制折线:
...
var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)
// add the overlay
self.mapView.addOverlay(polyLine, level: MKOverlayLevel.AboveLabels)
...
要绘制叠加层,您需要创建一个 MKOverlayRenderer
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay.isKindOfClass(MKPolyline) {
// draw the track
let polyLine = overlay
let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
return polyLineRenderer
}
return nil
}
我有一个存储在 Core Data 中的坐标列表,以及它们的保存时间,格式如下:
游戏 - 整数 16
纬度 - 双精度
经度 - 双精度
时间 - 日期
我已经成功地获取了用户的位置并将其存储在核心数据中,但我无法检索它并将其显示在地图上。我曾尝试寻找合适的教程,但找不到任何结合查询的核心数据和 MKPolyline 方面的内容。总的来说,我对编码还很陌生,我不能完全对齐两者。
所以,我知道以下代码将帮助我在地图上绘图:
var coordinates = locations.map({ (location: CLLocation) ->
CLLocationCoordinate2D in
return location.coordinate
})
var polyline = MKPolyline(coordinates: &coordinates,
count: locations.count)
我的代码中已经有了这个来获取核心数据:
@IBOutlet weak var mapView: MKMapView!
var locationsList: [Locations] = []
var contextMap = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
var requestMap = NSFetchRequest(entityName: "Locations")
let predMap = NSPredicate(format: "game = %d", gameNumber)
requestMap.predicate = predMap
requestMap.sortDescriptors = [NSSortDescriptor(key:"time", ascending: false)]
self.locationsList = context.executeFetchRequest(requestMap, error: nil)! as [Locations]
但我不能为了从 Core Data 获取我的坐标并将它们放在地图上而将两者结合起来。
任何帮助都会很棒 - 谢谢。
您已经有了一个 CLLocation
坐标数组并构建了一个 MKPolyline
。目前一切正常。
现在您需要告诉 MKMapView
在地图上绘制折线:
...
var polyline = MKPolyline(coordinates: &coordinates, count: locations.count)
// add the overlay
self.mapView.addOverlay(polyLine, level: MKOverlayLevel.AboveLabels)
...
要绘制叠加层,您需要创建一个 MKOverlayRenderer
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if overlay.isKindOfClass(MKPolyline) {
// draw the track
let polyLine = overlay
let polyLineRenderer = MKPolylineRenderer(overlay: polyLine)
polyLineRenderer.strokeColor = UIColor.blueColor()
polyLineRenderer.lineWidth = 2.0
return polyLineRenderer
}
return nil
}