我正在开发一个应用程序,我需要使用lat / long在两点之间绘制路径。
我使用了apple API来获取折线并在解码后绘制它。
问题:
以下是代码:
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];
}
答案 0 :(得分:1)
decodePolyLine 完全取决于您获得的纬度和经度。因此,如果您获得正确的纬度和经度,则不会发生这种情况。来自 iOS6 以及 apple 的tis的另一个原因是使用它自己的地图,因此它们可能有不同的纬度和经度来自 Google 地图。
答案 1 :(得分:0)
这与您在其他question中描述的问题相同,并且它具有相同的解决方案。您正在使用来自两个不同来源的数据,而且数据不同。