我正在声明这样一个观点
makeAnnotation(givenTitle: "Start", pointCoords: userCoords)
turnLocations.append(userCoords)
let region = MKCoordinateRegion(center: userCoords, latitudinalMeters: 100, longitudinalMeters: 100)
mapView.setRegion(region, animated: true)
userCoords
设置正确,并且标题“ Start”出现在地图上,没有注释图钉的视觉效果,尽管它确实会随着区域正确缩放。当我计算此“开始”和我的其他注释之间的距离并将它们添加在一起时,它可以正常工作,甚至重新绘制开始路线。但是,当我像这样制作一条折线时:(并正确渲染)
let polyline = MKPolyline(coordinates: turnLocations, count: turnLocations.count) //makes polyLine w/ coords given
mapView.addOverlay(polyline)
[它仅在turnLocations
数组中的每个其他点之间建立一条折线,或者像这样奇怪地连接它(它应该连接到turn1)
编辑:自从我被问到以来,这就是turnLocations中其他坐标的添加方式:
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
<<
您说:
打印的位置是[__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坐标所混淆。但是,如果您使用实际的真实世界坐标,则可以正常工作。
坦率地说,这些数据点看起来都不正确。您通常会在-180到180之间表示纬度和经度,但是在非洲沿海的海洋中,它们本身都是零左右。
因此,如果您担心地图视图无法正确处理退化的0,0场景,请随时使用post a bug report。如果您认为自己的应用程序会遇到0、0和相关情况,建议您添加一个针对0个纬度和/或经度值的测试并进行相应处理(例如,使用微小的非零值) 。