имеют линию, проведенную на основе трех битов данных: координат дано, расстояние, подшипник.
Я хочу, чтобы линия была нарисована из моего текущего местоположения в направлении подшипника, в точке и в конце точки.
Голые в виду
Я получаю линию на карте, обновляется каждый раз, когда текущее местоположение, так что это не проблема в этом смысле (код я уже показал, не может включать в себя все определения - но предположим, что нет ошибки компиляции и т.д.)
проблема
появляется Моя линия, но всегда только в одном направлении, на расстоянии через весь мир (вместо 1 км!). Я попытался изменить ввод заголовка, но все равно получаю ту же строку.
Код
func drawHeadingLine(currentLocation: [Double], heading: Double){
//to radians
let headingR = heading * 0.0174533;
if viewLine != nil{
mapView.removeOverlay(viewLine);
}
// setup data for polar formulae
let pi = M_PI;
let currentLONG = currentLocation[0];
let currentLAT = currentLocation[1];
let currentLongRadian = currentLocation[0] * (pi * 180);
let currentLatRadian = currentLocation[1] * (pi * 180);
let lineDistance: Double = 1; //km
let earthRadius: Double = 6378.1; //km
let angularDistance: Double = lineDistance/earthRadius;
//use polar formulae (given point, distance, bearing) for line end point
let latitude2 = asin(sin(currentLatRadian) * cos(angularDistance)
+ cos(currentLatRadian) * sin(angularDistance) * cos(headingR));
let longitude2 = currentLongRadian + atan2(cos(angularDistance) - sin(currentLatRadian) * sin(latitude2),
sin(headingR) * sin(angularDistance) * cos(currentLatRadian));
var coordinates1 = CLLocationCoordinate2D();
coordinates1.longitude = currentLONG;
coordinates1.latitude = currentLAT;
var coordinates2 = CLLocationCoordinate2D();
coordinates2.longitude = longitude2;
coordinates2.latitude = latitude2;
var lineCoords = [ coordinates1,coordinates2];
viewLine = MKPolyline(coordinates: &lineCoords, count: lineCoords.count);
self.mapView.addOverlay(viewLine);
}
func mapView(mapView: MKMapView!, viewForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
if (overlay is MKPolyline) {
viewLine = overlay;
let line = MKPolylineRenderer(overlay: viewLine);
line.strokeColor = UIColor.redColor().colorWithAlphaComponent(0.5);
line.lineWidth = 5;
return line;
}
return nil
}
Скажите, пожалуйста, если вам нужна дополнительная информация. Спасибо за любую помощь.
Ваш код добавляет 'MKPolyline' представляется правильным. Попробуйте просмотреть ваш расчет второй координаты. – zcui93