【问题标题】:Plotting Co-ordinates with MKMapView using Polyline (Swift)使用折线(Swift)使用 MKMapView 绘制坐标
【发布时间】:2018-11-09 11:30:30
【问题描述】:

我正在尝试使用 MKMapView 在地图上绘制预先确定的坐标。以下代码由按钮触发。

数组“coordinatesArr”是二维的,包含纬度、经度和时间戳。由于其他原因,每个元素都存储为字符串,因此在加载时坐标会转换为双精度值。

例子:

 [["37.33027293", "-122.02788965", "2018-05-30 15:18:21.459808+0100"], ["37.33026014", "-122.02768476", "2018-05-30 15:18:22.459808+0100"]]

代码保存在以下类中:

 class PostCell: UITableViewCell, MKMapViewDelegate

代码

 (MAP IS THE FOLLOWING OUTLET: @IBOutlet weak var activityFeedMap: MKMapView!)

 let span = MKCoordinateSpanMake(0.001, 0.001)
 // ALTHOUGH THIS WILL NOT BE MY ULTIMATE METHOD, THE MAP IS CURRENTLY CENTRED ON THE FIRST LOCATION
 let myLocation = CLLocationCoordinate2DMake(Double(coordinatesArr[0][1]) ?? 0.0, Double(coordinatesArr[0][0])!)
 let region = MKCoordinateRegionMake(myLocation, span)
 activityFeedMap.setRegion(region, animated:true)
 activityFeedMap.delegate=self
 activityFeedMap.mapType = MKMapType.hybrid

 // CODE IN QUESTION
 // ---
 // PERHAPS I SHOULD LOOP THROUGH THE ARRAY, BUT I BELIEVE THIS
 // FULFILS THE SAME PURPOSE
 var counter=0
 while counter < (coordinatesArr.count - 1){

    // LASTLOCFORMATTED, AND NEXTLOCFORMATTED ARE EACH A SET OF
    // CO-ORDINATES BETWEEN WHICH A POLYLINE SHOULD BE PLOTTED
    let lastLocFormatted = CLLocationCoordinate2DMake(Double(coordinatesArr[counter][1])!, Double(coordinatesArr[counter][0])!)

    let nextLocFormatted = CLLocationCoordinate2DMake(Double(coordinatesArr[counter+1][1])!, Double(coordinatesArr[counter+1][0])!)

    // AN ARRAY HOLDING THE CO-ORDINATES OF THE POINTS TO PLOT
    // A POLYLINE BETWEEN
    var a=[lastLocFormatted, nextLocFormatted]

    // LINE TO PLOT
    let polyline = MKPolyline(coordinates: &a, count: counter)

    activityFeedMap.add(polyline)

    COUNTER += 1
 }


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    // CHECK TO SEE WHETHER OVERLAY IS OF TYPE MKPOLYLINE
    // AND ONLY LAY TRACE IF TIMER RUNNING
    // note: different renderer required for differnt types
    if overlay is MKPolyline{
        // CREATE MKPOLYLINERENDERER AND PASS OUR OVERLAY OVER
        let polylineRenderer = MKPolylineRenderer(overlay: overlay)
        // SET LINE COLOR TO BLUE
        polylineRenderer.strokeColor = UIColor.orange
        // SET LINE WIDTH TO 4
        polylineRenderer.lineWidth = 4
        return polylineRenderer
    }
    // IF OVERLAY NOT OF TYPE MKPOLYLINE
    return MKPolylineRenderer()
}

虽然这段代码部分有效,但我还是以某种方式获得了额外的数据。

 37.33027293, -122.02788965
 37.33026634, -122.0278357
 37.33026525, -122.02778504
 37.33026222, -122.02773507
 37.33026014, -122.02768476

上面应该绘制:

然而,这段代码创建了以下内容

蓝色轮廓线似乎无限期地继续。

您能提供的任何帮助将不胜感激,因为我是 Swift 新手,并且已经用尽了我能想到的所有纠正措施。

谢谢!

【问题讨论】:

    标签: swift mkmapview coordinates polyline


    【解决方案1】:

    首先,我建议使用https://developer.apple.com/documentation/mapkit/mkpolyline/1452773-polylinewithpoints poloylineWithPoints 为每个添加一条折线。

    看起来是您的超调,而您的最后一段正在缩小到零岛。

    【讨论】:

    • 感谢您的帮助。虽然我没有设法修复我的原始代码,但通过实施您的建议,我能够让它工作。
    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多