问题描述
我想在iOS 6.1上提供支持,所以我使用GoogleMap,了解iOS7的恢复情况。
我使用GoogleMap API来显示GoogleMap上两点之间的绘制方向。
使用下面的代码进行解析并获取坐标的步骤以在地图上绘制折线:
NSURL * url = [[NSURL alloc] initWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSError *错误;
NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:& error];
NSArray * latestRoutes = [json objectForKey:@routes];
NSMutableDictionary * legs = [[[latestRoutes objectAtIndex:0] objectForKey:@legs] objectAtIndex:0];
NSArray * steps = [legs objectForKey:@steps];
NSString * startLocation,* endLocation,* totalDistance,* totalDuration;
CLLocationCoordinate2D startLoc,endLoc;
startLocation = [legs objectForKey:@start_address];
endLocation = [legs objectForKey:@end_address];
totalDistance = [[legs objectForKey:@distance] objectForKey:@text];
totalDuration = [[leg objectForKey:@duration] objectForKey:@text];
startLoc = CLLocationCoordinate2DMake([[legs objectForKey:@start_location] objectForKey:@lat] doubleValue] [[[legs objectForKey:@start_location] objectForKey:@lng] doubleValue]) ;
endLoc = CLLocationCoordinate2DMake([[[legs objectForKey:@end_location] objectForKey:@lat] doubleValue],[[[legs objectForKey:@end_location] objectForKey:@lng] doubleValue]) ;
NSMutableDictionary * tempDict;
if([steps count]!= 0){
GMSMutablePath * path = [GMSMutablePath path];
for(int idx = 0; idx< [steps count] +2; idx ++){
CLLocationCoordinate2D workingCoordinate;
if(idx == 0){
workingCoordinate = startLoc;
[path addCoordinate:workingCoordinate];
else if(idx == [steps count] +1){
workingCoordinate = endLoc;
[path addCoordinate:workingCoordinate];
$ {b
$ b workingCoordinate = CLLocationCoordinate2DMake([[[[steps [objectAtIndex:idx-1] objectForKey:@start_location] objectForKey:@lat] floatValue] ,[[[steps objectAtIndex:idx-1] objectForKey:@start_location] objectForKey:@lng] floatValue]);
[path addCoordinate:workingCoordinate];
}
tempDict = nil;
}
//根据点数组创建多段线。
GMSPolyline * rectangle = [GMSPolyline polylineWithPath:path];
rectangle.strokeWidth = 5.0;
rectangle.map = mapView_;
}
它只提供24个步骤,意味着只有24个坐标点创建并绘制Line on地图如下图所示:
你可以看到这条线路不在正确的道路上,所以我能做些什么来解决这个问题?
i也希望在地图上显示方向。
下面的答案适用于两个位置之间的平滑路径@ABáo:
您可以比较此代码的屏幕截图以前的截图,我用于问问题:
I am using GoogleMap API for showing draw direction between two points on GoogleMap.
i want to give support on iOS 6.1 so i use GoogleMap i know about iOS7 recover this.
using below code for parsing and get Steps for coordinates to draw polyline on Map:
NSString *str=@"http://maps.googleapis.com/maps/api/directions/json?origin=bharuch,gujarat&destination=vadodara,gujarat&sensor=false";
NSURL *url=[[NSURL alloc]initWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSArray* latestRoutes = [json objectForKey:@"routes"];
NSMutableDictionary *legs=[[[latestRoutes objectAtIndex:0] objectForKey:@"legs"] objectAtIndex:0];
NSArray *steps=[legs objectForKey:@"steps"];
NSString *startLocation,*endLocation,*totalDistance,*totalDuration;
CLLocationCoordinate2D startLoc,endLoc;
startLocation = [legs objectForKey:@"start_address"];
endLocation = [legs objectForKey:@"end_address"];
totalDistance = [[legs objectForKey:@"distance"] objectForKey:@"text"];
totalDuration = [[legs objectForKey:@"duration"] objectForKey:@"text"];
startLoc=CLLocationCoordinate2DMake([[[legs objectForKey:@"start_location"] objectForKey:@"lat"] doubleValue], [[[legs objectForKey:@"start_location"] objectForKey:@"lng"] doubleValue]);
endLoc=CLLocationCoordinate2DMake([[[legs objectForKey:@"end_location"] objectForKey:@"lat"] doubleValue], [[[legs objectForKey:@"end_location"] objectForKey:@"lng"] doubleValue]);
NSMutableDictionary *tempDict;
if ([steps count]!=0) {
GMSMutablePath *path = [GMSMutablePath path];
for(int idx = 0; idx < [steps count]+2; idx++){
CLLocationCoordinate2D workingCoordinate;
if (idx==0) {
workingCoordinate=startLoc;
[path addCoordinate:workingCoordinate];
}
else if (idx==[steps count]+1){
workingCoordinate=endLoc;
[path addCoordinate:workingCoordinate];
}
else{
workingCoordinate=CLLocationCoordinate2DMake([[[[steps objectAtIndex:idx-1] objectForKey:@"start_location"] objectForKey:@"lat"] floatValue], [[[[steps objectAtIndex:idx-1] objectForKey:@"start_location"] objectForKey:@"lng"] floatValue]);
[path addCoordinate:workingCoordinate];
}
tempDict = nil;
}
// create the polyline based on the array of points.
GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path];
rectangle.strokeWidth=5.0;
rectangle.map = mapView_;
}
its gives only 24 steps means only 24 Coordinates for create point and draw Line on Map which is shown as below image:
you can see that line is not on proper road so what can i do to solve this?i also want to show direction on map too.
Below answer is for smooth path between two location with help of @A Báo:
Screenshot of this code you can compare it with previous screenshot which i used in asking Question:
这篇关于GoogleMap API为两点之间的方向提供了错误的坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!