本文介绍了GoogleMap API为两点之间的方向提供了错误的坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我想在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为两点之间的方向提供了错误的坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-17 00:41