折线未连接到第一点

Polyline not connecting to first point

我要这样声明一个观点

makeAnnotation(givenTitle: "Start", pointCoords: userCoords)
turnLocations.append(userCoords)
let region = MKCoordinateRegion(center: userCoords, latitudinalMeters: 100, longitudinalMeters: 100)
mapView.setRegion(region, animated: true) 

userCoords 正在设置正确,并且标题 "Start" 出现在地图上,但没有注释图钉可见,尽管它确实随区域正确缩放到它。当我计算这个 "Start" 和我的其他注释之间的距离并将它们加在一起时,它工作正常,甚至重新调整了起始路线。但是,当我制作这样的多段线时:(并正确渲染)

let polyline = MKPolyline(coordinates: turnLocations, count: turnLocations.count) //makes polyLine w/ coords given
mapView.addOverlay(polyline)

它只会在 turnLocations 数组中的每个其他点之间制作一条折线,或者像这样奇怪地连接它(它应该连接到 turn1)

编辑:因为我被问到,这里是如何依次添加其他坐标位置:

let coords = mapView.convert(tapLocation,toCoordinateFrom: mapView)
print("Tapped at lat: \(coords.latitude) long: \(coords.longitude)")
makeAnnotation(givenTitle: "Turn\(annotations.count)", pointCoords: coords)
turnLocations.append(coords)

它在顶部定义如下:

var turnLocations: [CLLocationCoordinate2D] = []

并用

清除
turnLocations = []

每当用户在应用程序上重置坐标时(使用重置按钮) 只要没有注释就添加开始按钮

if(turnLocations.count < 1){ //if start isn't there already, it creates it
makeAnnotation(givenTitle: "Start", pointCoords: userCoords)
turnLocations.append(userCoords)
let region = MKCoordinateRegion(center: userCoords, latitudinalMeters: 100, longitudinalMeters: 100)
mapView.setRegion(region, animated: true)
}

一旦 userLocation 更新(使用内置的位置管理器方法),userCoords 就是用这个定义的

userCoords = mapView.userLocation.coordinate

你说:

the locations printed were [__C.CLLocationCoordinate2D(latitude: 0.0, longitude: 0.0), __C.CLLocationCoordinate2D(latitude: -1.197754045278998e-06, longitude: -0.00022158450201459345), __C.CLLocationCoordinate2D(latitude: 0.00030902054875525664, longitude: -0.0002335620426663354), __C.CLLocationCoordinate2D(latitude: 0.00019164065039944944, longitude: 0.00014013722557137953)]

折线刚刚被纬度和经度 0、0 处的第一个数据点弄糊涂了。

考虑:

let coordinates = [
    CLLocationCoordinate2D(latitude: 0, longitude: 0),
    CLLocationCoordinate2D(latitude: -1.197754045278998e-06, longitude: -0.00022158450201459345),
    CLLocationCoordinate2D(latitude: 0.00030902054875525664, longitude: -0.0002335620426663354),
    CLLocationCoordinate2D(latitude: 0.00019164065039944944, longitude: 0.00014013722557137953)
]

let polyline = MKPolyline(coordinates: coordinates, count: coordinates.count)
mapView.addOverlay(polyline)
mapView.setVisibleMapRect(polyline.boundingMapRect, animated: true)

产生:

如果您将第一个更改为其他内容,例如CLLocationCoordinate2D(latitude: 0.0000001, longitude: 0.0000001),然后它工作正常:

很明显MKPolylineRenderer只是被0, 0坐标弄糊涂了。但是,如果您使用最终用户可能所在的实用的真实世界坐标,那么它就可以正常工作。

坦率地说,none 这些数据点看起来很正确。您通常会用 -180 到 180 之间的值来表示纬度和经度,但在非洲海岸附近的海洋中,它们本身都在零附近。

因此,如果您担心地图视图无法正确处理退化的 0, 0 场景,请随时 post a bug report。如果您认为您将在您的应用程序中遇到 0、0 和相关场景,我建议您添加一个针对 0 纬度 and/or 经度值的测试并相应地处理(例如,使用微小的非零值)。