我在iOS应用中使用谷歌api V3, 我请求google api方向服务,通过http GET方法,我得到了一个非常大的json响应,我从源到目的地有很多备用路由,现在我想在地图上显示每个备选路线,我该怎么做?是否需要在iOS中集成google sdk,或者我只能使用webView,请帮助我,并提出最简单的方法。 提前致谢
答案 0 :(得分:5)
您无需包含任何Google SDK即可在地图上绘制路线。看看下面的课程。
谷歌地图api方向服务将为您提供在两个特定点之间绘制路线的腿(坐标)。
由于你已经有来自Direction api的json响应,你现在必须解析json并从json获取所有腿点以创建Coordinate数组。
这些要点可能是或大部分是入选的。 How to decode the Google Directions API polylines field into lat long points in objective-C for iPhone?
如果您有坐标数组,那么首先必须创建一个CLLocationCoordinate2D数组,如下所示:
CLLocationCoordinate2D *pointArr = malloc(sizeof(CLLocationCoordinate2D) * [your_CoordinateArray count]);
for(int i = 0; i < [your_CoordinateArray count]; i++){
pointArr[i] = [your_CoordinateArray objectAtIndex:i];
}
然后您必须将折线添加到地图
MKPolyline *line = [MKPolyline polylineWithCoordinates:pointArr count:[your_CoordinateArray count]];
if (nil != line)
{
[your_Map addOverlay:line];
}
然后你必须实现以下地图委托:
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKOverlayView* overlayView = nil;
lineView = [[MKPolylineView alloc] initWithPolyline:overlay];// lineView is an ivar, object of MKPolylineView
lineView.fillColor = [UIColor greenColor];
lineView.strokeColor = [UIColor greenColor];
lineView.lineWidth = 10.0;
lineView.alpha = 0.9;
overlayView = lineView;
return overlayView;
}
现在,如果要在两个点之间显示两条不同的路径,则必须创建两个不同的坐标数组,并对两个数组应用上述方法
希望这会对你有所帮助。
答案 1 :(得分:0)
没有必要说整合谷歌sdk你可以简单地使用webView,因为我相信webView为你提供了另外的视图,但用户界面在SDK中比在线更干净。但就目前而言,我不相信SDK允许其他应用程序显示我使用新SDK的替代路线。 maps.google.com中的代码现在与中的代码有很大不同 API,可以访问不同的服务。特别是,它有一个庞大的外部模块mod_suggest.js,它在API中不存在。但您可以通过
实现它1)将请求发送到maps.google.com,然后让它执行建议, 即打开一个新的浏览器窗口并传递类似的东西 http://www.google.com/maps?f=d&source=s_d&saddr=Jurong+West,+Singapore&da DDR =昂+沫+的Kio,+新加坡&安培; HL = EN
2)只显示正常路线和避开高速公路路线。
3)尝试猜测合理的航路点,以便在路线中间添加 可能导致合理的替代方案。除非你有一个,否则这并不容易 高速公路或公路交叉口的数据库,可以寻找这样的 交叉点位于起点和终点之间(for 一些近似值“之间”)。
使用航点的lat / lng坐标可能会出现问题, 特别是如果涉及双车道。如果坐标 如果在错误的行车道上有一点,GDirections将驾驶一辆 相当远的距离让你走错了方向 这条路。但即使使用街道名称,您也可能会遇到奇怪的问题 在航点附近,像这样:
来自:Jurong West,新加坡:Ayer Rajah Expy新加坡:Ang Mo. Kio,新加坡
或许真正解决这个问题的唯一方法就是包括点 双车道的两侧,并且没有穿过的道路 在下面或开销,然后尝试过滤掉那些 愚蠢的。
考虑这些例子
从:Jurong West,新加坡:1.32558,103.740764:Ang Mo Kio, 新加坡
从:Jurong West,新加坡:1.32582,103.740764:Ang Mo Kio, 新加坡
其中一个通过复杂的短途旅行增加了7分钟 走错了路。
编写代码来过滤掉愚蠢的路线并不容易。作为第一个 近似,你可以丢弃估计时间的路线 比初始路线长10%以上。你也可以 比较双重对立面上的成对点的持续时间 车道,总是丢弃较慢的车道。
编写代码以丢弃重复路由也不容易。例如, Bukit Timah Expy或Kranji Expy上的一个点可能会创建一条路线 Google的Seletar Expy建议重复。
但由于API不允许,这可能不是合法的实施。希望这会有所帮助。