MKMapkit路线未对齐或不在道路中心

时间:2013-04-12 05:25:01

标签: iphone objective-c mapkit mkplacemark

我正在开发一个应用程序,我需要使用lat / long在两点之间绘制路径。

我使用了apple API来获取折线并在解码后绘制它。

问题:

  1. 路线不在路中间(附图image_1)或路线未对齐
  2. enter image description here

    enter image description here

    以下是代码:

        NSString* saddr = [NSString stringWithFormat:@"%@,%@",self.lat1.text,self.long1.text];
    
        NSString* daddr = [NSString stringWithFormat:@"%@,%@",self.lat2.text,self.long2.text];
    
        NSString* apiUrlStr = [NSString stringWithFormat:@"http://maps.apple.com/maps/api/directions/json?origin=%@&destination=%@&sensor=false", saddr, daddr];
    
        NSURL* apiUrl = [NSURL URLWithString:apiUrlStr];
    
        NSError *error;
        NSString *apiResponse = [NSString stringWithContentsOfURL:apiUrl encoding:NSUTF8StringEncoding error:&error];
    
    
        NSData *responseData = [apiResponse dataUsingEncoding:NSUTF8StringEncoding];
    
    
        NSError* error1;
        NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                             options:NSJSONReadingMutableLeaves
                                                               error:&error1];
        NSLog(@"Error: %@\n%@",[error1 localizedDescription],[error1 localizedFailureReason]);
    
    
       if([[json objectForKey:@"status"] isEqualToString:@"OK"])
        {
            NSArray *routes1 = [json objectForKey:@"routes"];
            NSDictionary *route = [routes1 lastObject];
    
            if (route)
            {
                NSString *overviewPolyline = [[route objectForKey: @"overview_polyline"] objectForKey:@"points"];
    
                routes = [self decodePolyLine:overviewPolyline];
    
                //NSLog(@"%@",[routes objectAtIndex:0]);
    
                [self updateRouteView];
                [self centerMap];
            }
        }
    
    
    -(void) updateRouteView
    {
     NSInteger numberOfSteps = routes.count;
    
    CLLocationCoordinate2D coordinates[numberOfSteps];
    for (NSInteger index = 0; index < numberOfSteps; index++) {
        CLLocation *location = [routes objectAtIndex:index];
        CLLocationCoordinate2D coordinate = location.coordinate;
    
        coordinates[index] = coordinate;
    }
    
    MKPolyline *polyLine = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps];
    [self.mapView addOverlay:polyLine];
    
    }
    

2 个答案:

答案 0 :(得分:1)

decodePolyLine 完全取决于您获得的纬度经度。因此,如果您获得正确的纬度经度,则不会发生这种情况。来自 iOS6 以及 apple 的tis的另一个原因是使用它自己的地图,因此它们可能有不同的纬度经度来自 Google 地图。

答案 1 :(得分:0)

这与您在其他question中描述的问题相同,并且它具有相同的解决方案。您正在使用来自两个不同来源的数据,而且数据不同。