如何使用 MapKit 绘制两个位置之间的路线并绘制要点?

2024-02-24

我正在使用 MapKit api 获取地图上的当前位置,并绘制由落针指向的两个位置之间的路线。我还想获取其路线之间的所有主要看台。 我正在使用下面的函数来获取两个位置之间的路线

- (NSArray*)getRoutePointFrom:(MyLocation*)origin to:(MyLocation*)destination
{
 NSString* saddr = [NSString stringWithFormat:@"%f,%f", origin.coordinate.latitude, origin.coordinate.longitude];
 NSString* daddr = [NSString stringWithFormat:@"%f,%f", destination.coordinate.latitude, destination.coordinate.longitude];


 NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=%@&destination=%@&sensor=false&avoid=highways&mode=driving",saddr,daddr]];

 NSError *error=nil;

 NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;

 [request setURL:url];
 [request setHTTPMethod:@"POST"];

  NSURLResponse *response = nil;

  NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: &error];

  NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];

 SBJsonParser *json=[[SBJsonParser alloc] init];

 NSDictionary *dic=[json objectWithString:responseString error:nil];

 NSDictionary *nextdic=[dic valueForKey:@"routes"];
 NSDictionary *legdic=[nextdic valueForKey:@"legs"];
 NSDictionary *stepdic=[legdic valueForKey:@"steps"];

 NSArray *array=[[NSArray alloc] initWithArray:[[stepdic valueForKey:@"polyline"] valueForKey:@"points"]];  


 NSString *string=[NSString stringWithFormat:@"%@",[[array objectAtIndex:0] objectAtIndex:0]];




 return [self decodePolyLine:[string mutableCopy]];

}



-(NSMutableArray *)decodePolyLine:(NSString *)encodedStr 
{  

 NSMutableString *encoded = [[NSMutableString alloc] initWithCapacity:[encodedStr length]];  
 [encoded appendString:encodedStr];  
 [encoded replaceOccurrencesOfString:@"\\\\" withString:@"\\"  
                             options:NSLiteralSearch  
                               range:NSMakeRange(0, [encoded length])];  
 NSInteger len = [encoded length];  

 NSInteger index = 0;  
 NSMutableArray *array = [[NSMutableArray alloc] init] ;  
 NSInteger lat=0;  
 NSInteger lng=0;  
 while (index < len) {  
  NSInteger b;  
  NSInteger shift = 0;  
  NSInteger result = 0;  
  do {  
   b = [encoded characterAtIndex:index++] - 63;  
   result |= (b & 0x1f) << shift;  
   shift += 5;  
  } while (b >= 0x20);  
  NSInteger dlat = ((result & 1) ? ~(result >> 1) : (result >> 1));  
  lat += dlat;  
  shift = 0;  
  result = 0;  
  do {  
   b = [encoded characterAtIndex:index++] - 63;  
   result |= (b & 0x1f) << shift;  
   shift += 5;  
  } while (b >= 0x20);  
  NSInteger dlng = ((result & 1) ? ~(result >> 1) : (result >> 1));  
  lng += dlng;  
  NSNumber *latitude = [[NSNumber alloc] initWithFloat:lat * 1e-5];  
  NSNumber *longitude = [[NSNumber alloc] initWithFloat:lng * 1e-5];  
  //          printf("[%f,", [latitude doubleValue]);  
  //          printf("%f]", [longitude doubleValue]);  
  CLLocation *loc =[[CLLocation alloc] initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]] ;  
  [array addObject:loc];  
 }  

 NSLog(@"array in decode polygon is %@",array);

 return array;  
}

但它不起作用。 ..

有关于此的帮助 谢谢你!...


这个问题已经被问过好几次了。我猜你正在从以下位置获取代码http://iosguy.com/2012/05/22/tracing-routes-with-mapkit/ http://iosguy.com/2012/05/22/tracing-routes-with-mapkit/您还可以看看这个问题:在 iOS 中绘制多点路线 https://stackoverflow.com/questions/10639530/plotting-route-with-multiple-points-in-ios

您可以从以下位置获取代码http://iosboilerplate.com http://iosboilerplate.com也并为此做出贡献。

最后但并非最不重要的一点是,有一个框架可以帮助您花很少的钱来完成它(但与您做同样的事情相比,这没什么可比的):http://www.cocoacontrols.com/controls/mtdirectionskit http://www.cocoacontrols.com/controls/mtdirectionskit

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MapKit 绘制两个位置之间的路线并绘制要点? 的相关文章

随机推荐

  • Facebook sdk 在应用程序委托中崩溃

    以下是我复制该错误的方法 这是我用于登录的代码 IBAction func FBLoginAction sender AnyObject fbLoginManager loginBehavior FBSDKLoginBehavior bro
  • 由于 Web 部署而将绝对路径更改为相对路径(Python - Flask)

    我创建了一个可以在本地运行的应用程序 我想将其部署到 Heroku 当我部署它时 我在 Heroku 日志中收到错误 提示找不到我在脚本中指定的文件夹 正如预期的那样 它们是绝对路径 我正在尝试做出改变 但没有一个有效 我在服务器端使用 F
  • 如何在 iOS SDK 中为用户提供预先编写的 SMS 消息

    我使用 Apple Dev 网站上的示例代码来学习如何设置预写电子邮件 但是有没有办法类似地设置预写短信 首先你必须添加框架MessageUI到您的项目并导入库 MessageUI MessageUI h 然后遵守协议
  • Android - 将视频/音频文件上传到 Firebase 存储

    我正在使用 Firebase 存储来保存视频 音频用户的文件 我的主要想法是将每个视频 音频保存在用户 ID UID 下 这意味着每个用户在其 UID 下保存有多个视频 音频文件 我写了一个代码 问题是他不断将新视频保存在我保存的旧视频上
  • JavaFX 菜单栏中的菜单右对齐

    In Java Swing可以使用以下方法将菜单放在菜单栏的右侧 menubar add menu1 menubar add Box createHorizontalGlue menubar add menu2 这将把menu1在左边和me
  • 如何播放 MP3 文件? [复制]

    这个问题在这里已经有答案了 我正在尝试访问MP3 http en wikipedia org wiki MP3音频文件保存在我的源文件夹中 以便我可以在 Java 程序 应用程序 而不是小程序 中播放它 我似乎遇到的问题是我无法导入java
  • HTML5在画布上拖放路径,无需JS库

    我想在 HTML5 画布上拖放路径 如果我们点击形状 我没有发现任何类似 SVG 提供事件的东西 有人知道我如何在这里处理路径项上的事件吗 我想在没有任何java脚本库的情况下做到这一点 以下是我当前绘制路径的代码 var canvas d
  • MongoDB索引定义策略

    我有一个基于 MongoDB 的数据库 里面有大约 100K 到 500K 文本文档 并且该集合不断增长 系统应支持文档不同字段的查询 例如 标题 类别 重要性等 该系统是一个近乎实时的系统 每 5 10 分钟就会获取新文档 为了提高查询性
  • 引用具有动态工作表名称的另一个工作簿

    我想引用另一个工作簿和一个依赖于某些单元格值的特定工作表 这个方程有效 S 停机时间 11 Nov 2013 Downtime Tracker xls 30 F 12 但值 Nov 和 30 是动态的 它们分别取决于 D13 和 E13 的
  • C getopt 多个值

    我的论点是这样的 a out i file1 file2 file3 我该如何利用getopt 获取 3 个 或更多 输入文件 我正在做这样的事情 while opt getopt argc argv i xyz 1 case i inpu
  • 如何从范围滑块获取多个值 - bootstrap-slider.js

    我正在使用 bootstrap slider js http www eyecon ro bootstrap slider http www eyecon ro bootstrap slider 给我范围滑块功能 我在一页上有 9 个滑块
  • 删除seaborn线图图例标题

    我想从我的seaborn lineplot 图例中删除标题 我尝试使用这个答案 https stackoverflow com a 45335602 2970186无济于事 import matplotlib pyplot as plt i
  • 我们可以对类型类进行抽象吗?

    我想知道我们不能对类型类进行抽象是否有更深层次的原因 或者我们可以吗 例如 当我们有 fzip forall a a gt a gt b gt c gt b c fzip f xs ys zip f xs f ys 那么我们可以说 fzip
  • 无法让 git 与 iconv 和 utf-16 很好地配合

    我试图让 git 将 UTF 16 识别为文本 以允许我本地比较和修补文本 但我无法获取textconv参数来工作 我可以手动调用 iconv f utf 16 t utf 8 some utf 16 file rc 一切都很好 但是如果我
  • 如何获取 CodenameOne TextField 中每次更改的事件

    我正在使用 CodenameOne 构建一个应用程序 并希望使用 TextField 来过滤一长串项目 我尝试使用 DataChangedListener 如建议的那样https www codenameone com javadoc co
  • 如何获取 QTreeWidget 的项目数

    我创建了一个 QTreeWidget 我正在尝试列出所有显示的项目 如果该项目有子项但未扩展 我不想进入该项目 它确实获取了我在树中可以看到的项目数量 我努力了 for int i 0 i lt MyTreeWidget gt topLev
  • iOS客户端服务器方法

    我熟悉其他平台上用于点对点或客户端 服务器消息传递的 SOAP 和 Web 服务 苹果的消息传递功能是什么 我正在尝试组装一个应用程序服务器来管理协作工作环境 LAN 上平均有 200 个 最多 1000 个移动客户端 例如 一台 Mac
  • Android 从自己的服务器自动更新

    我一直在寻找一个很好的例子 如何更新我自己开发的应用程序 因此 我的设备上安装了一个 apk 当我启动它时 我想检查我的服务器上是否存在任何更新 如果是 则从网络服务器下载并安装 首先我必须检查我的服务器是否有任何更新 如果是 则下载并安装
  • 在Android(使用Java)中,如何设置铃声音量(指定的数字)?

    因此 在我的应用程序中 我有一个搜索栏 允许用户设置铃声音量 0 100 我似乎找不到将铃声音量设置为指定数字的方法 我浏览了音频管理器 http d android com reference android media AudioMan
  • 如何使用 MapKit 绘制两个位置之间的路线并绘制要点?

    我正在使用 MapKit api 获取地图上的当前位置 并绘制由落针指向的两个位置之间的路线 我还想获取其路线之间的所有主要看台 我正在使用下面的函数来获取两个位置之间的路线 NSArray getRoutePointFrom MyLoca