折线未连接到第一点

问题描述 投票:1回答:1

我正在声明这样一个观点

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)

https://imgur.com/a/kP3wbWc

编辑:自从我被问到以来,这就是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)

产生:

enter image description here

[如果您将第一个更改为其他内容,例如CLLocationCoordinate2D(latitude: 0.0000001, longitude: 0.0000001),则可以正常工作:

enter image description here

很显然MKPolylineRenderer只是被0、0坐标所混淆。但是,如果您使用实际的真实世界坐标,则可以正常工作。

坦率地说,这些数据点看起来都不正确。您通常会在-180到180之间表示纬度和经度,但是在非洲沿海的海洋中,它们本身都是零左右。

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

swift xcode annotations mapkit
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.