【问题标题】:Draw custom routes in google map in iOS在 iOS 的谷歌地图中绘制自定义路线
【发布时间】:2017-01-23 19:04:01
【问题描述】:

如何在两个未连接道路的目的地之间绘制自定义路线?

例如,如果 Source 是 The Pizza Factory,Destination 是 ATI Solutions,我必须像这样绘制路线,但没有道路可以连接这两个地方.

我尝试了 Google 的折线代码,但它只提供道路上的航点。

NSString *urlString = [NSString stringWithFormat:@"%@?origin=%@,%@&destination=%f,%f&sensor=false&waypoints=optimize:true&mode=driving", @"https://maps.googleapis.com/maps/api/directions/json", getmycurrlat, getmycurrlong, LATI, LONGI];
    NSLog(@"my driving api URL --- %@", urlString);
    NSLog(@"you clicked on button %ld", (long)sender.tag);
    NSURL* url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@", urlString]];
    NSURLResponse* res;
    NSError* err;
    NSData* data = [NSURLConnection sendSynchronousRequest:[[NSURLRequest alloc] initWithURL:url] returningResponse:&res error:&err];
    if (data == nil) {
        return;
    }

    NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSDictionary* routes = [dic objectForKey:@"routes"][0];
    NSDictionary* route = [routes objectForKey:@"overview_polyline"];
    NSString* overview_route = [route objectForKey:@"points"];

    GMSPath* path = [GMSPath pathFromEncodedPath:overview_route];
    GMSPolyline* polyline = [GMSPolyline polylineWithPath:path];
    polyline.strokeWidth = 5.f;
    polyline.map = self.mapView;

感谢所有帮助!

【问题讨论】:

  • 地图首选的标准路线制作路线是在有适当空间的道路上通过,您想制作什么样的自定义路线?
  • 比萨工厂和ATI解决方案之间没有道路连接,只有两座建筑物之间有一个空间。有没有办法像在快照中一样画线?
  • 如果您事先提供静态 lat long,我的 exp 地图中只会在连接的道路上创建路线,但也有动态方式在移动 have a look 时创建路线投注源到 dest。
  • 有没有办法创建自定义航点?
  • 你有什么运气吗?

标签: ios objective-c google-maps


【解决方案1】:

试试这个对我有用,希望对你有帮助,我正在使用 AFNetworking 获取数据

    NSString *url1 = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/directions/json?&origin=%@&destination=%@&mode=driving",[NSString stringWithFormat:@"%f,%f",self.locationManager.location.coordinate.latitude,self.locationManager.location.coordinate.longitude],pickLoc];
    AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
    [operationManager POST:url1
                parameters: nil
                   success:^(AFHTTPRequestOperation *operation, id responseObject) {
                       // NSLog(@"JSON: %@", [responseObject description]);

                       NSArray *routesArray = [responseObject objectForKey:@"routes"];

                       GMSPolyline *polyline = nil;

                       if ([routesArray count] > 0)
                       {
                           NSDictionary *routeDict = [routesArray objectAtIndex:0];
                           NSDictionary *routeOverviewPolyline = [routeDict objectForKey:@"overview_polyline"];
                           NSString *points = [routeOverviewPolyline objectForKey:@"points"];
                           GMSPath *path = [GMSPath pathFromEncodedPath:points];
                           polyline = [GMSPolyline polylineWithPath:path];
                           polyline.strokeWidth = 3;
                           polyline.strokeColor = [UIColor colorWithRed:0.9607 green:0.0358 blue:0.1529 alpha:0.6];
                           polyline.map = self.viewMapView;
                       }
                   }
                   failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                       NSLog(@"Error: %@", [error description]);
                   }
     ];

【讨论】:

  • 这将在道路上绘制折线。但我需要在非道路区域绘制折线。
  • 您可以看到 routsArray 并根据您的路线设置自己的自定义纬度并制作折线
  • 路线数组将只提供道路的航点。但我需要非道路的航路点。请检查上图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2013-06-23
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多