如何在 iPhone 应用程序内的 MKMapView 中显示和连接多个位置与带有注释的路线?

Posted

技术标签:

【中文标题】如何在 iPhone 应用程序内的 MKMapView 中显示和连接多个位置与带有注释的路线?【英文标题】:How to display and connect multiple locations with a route with annotations in an MKMapView inside an iPhone App? 【发布时间】:2012-10-04 15:12:46 【问题描述】:

我需要显示一个 MKMapView,其中包含 4 个以上具有不同注释的位置以及连接这些位置的路线。我试图在 MKMapView 中显示多个位置,但我仍然无法找到如何将位置与路线连接起来。如果我以正确的方式实施它,我也试图检查它。我创建了一个 "CLLocationCoordinate2D",然后类似地为 4 点添加了纬度和经度。我创建了一个自定义对象,它实现 MKAnnotation 并返回一个 location 。

CLLocationCoordinate2D coordinate1 = CLLocationCoordinate2DMake(40.7180583 ,-74.007109);
CLLocationCoordinate2D coordinate2 = CLLocationCoordinate2DMake(40.716355 ,-74.006816);
CLLocationCoordinate2D coordinate3 = CLLocationCoordinate2DMake(40.715281 ,-74.005485);
CLLocationCoordinate2D coordinate4 = CLLocationCoordinate2DMake(40.71559 ,-74.003114);

AnnotationPoints *location1 = [[AnnotationPoints alloc] initWithCoordinate:coordinate1];
AnnotationPoints *location2 = [[AnnotationPoints alloc] initWithCoordinate:coordinate2];
AnnotationPoints *location3 = [[AnnotationPoints alloc] initWithCoordinate:coordinate3];
AnnotationPoints *location4 = [[AnnotationPoints alloc] initWithCoordinate:coordinate4];

NSArray *poiArray = [[NSArray alloc] initWithObjects:location1,location2,location3,location4,nil];
    [mapView addAnnotations:poiArray];

//Inside the Annotation Class initWithCoordinate Method is implemented this way:-
-(id)initWithCoordinate:(CLLocationCoordinate2D) c
    coordinate=c;
    NSLog(@"%f,%f",c.latitude,c.longitude);
    return self;

我关心的是我需要为每个位置创建一个注释点。是否有任何替代方法可以将所有点加载到一个地方。这里的另一个困难是连接所有多个点的路线。对此有什么帮助吗?非常感谢

【问题讨论】:

【参考方案1】:

您添加注释的方式很好。 不确定您关心的是什么以及“一个地方的所有点”是什么意思。 如果您想在多个位置添加图钉/注释,则必须为每个位置创建一个单独的注释对象。

绘制连接这些位置的路线需要创建叠加层(不是“注释”)。 您想将MKPolyline 添加到您将为其指定坐标列表的地图中。

要绘制多段线,您不需要在每个坐标处添加注释(但如果您愿意,也可以)。

创建和添加MKPolyline 及其对应的MKPolylineViewMKPolygonMKPolygonView 非常相似。请参阅此问题以获取示例:

iPhone MKMapView - MKPolygon Issues

【讨论】:

感谢您的回复。我之所以这么说是因为我实际上是在为每个位置分配 AnnotationPoint 对象。考虑到大约有 50 个位置点,我们需要分配对象 50 次。所以我只是想弄清楚我们是否可以优化对象的分配。无论如何再次感谢。您能否简要介绍一下在多个点之间添加路线? 如果你只想让线穿过每个点,你不需要在每个点都添加注释。您只需要将 C 坐标数组提供给 MKPolyline,它就会通过这些点绘制线。如果还不清楚,请告诉我。 我可以画一条连接多个引脚的线,但这里的问题是连接引脚的线并没有真正连接地图中的道路。它只是直接连接道路中间的不同点。任何关于如何实现通过道路绘制点之间的路线的任何帮助都会有所帮助 折线只根据给定的坐标绘制线(它不知道它下面碰巧出现的道路)。您必须使用/找到一个返回转弯坐标并从这些坐标创建折线的 api。 ios 6 中的一个复杂问题是要找到一个可以在 Apple Maps 中使用的 api。如果不需要在您的应用中显示路线中,您可以调用地图应用并让它显示路线。 您将使用 - (void)calculateDirectionsWithCompletionHandler:(MKDirectionsHandler)completionHandler 返回每对点之间的路线。如果您想计算出访问多个点的最佳顺序,这是一个更棘手的问题,但您可以使用 -calculateETAWithCompletionHandler: 来告诉您每个可能对之间的时间。

以上是关于如何在 iPhone 应用程序内的 MKMapView 中显示和连接多个位置与带有注释的路线?的主要内容,如果未能解决你的问题,请参考以下文章

在我的 iPhone 应用程序内的“设置”应用程序中读取通知标志

如何使用 iphone 获取建筑物内的当前位置?

iPhone 应用程序内的谷歌地图集成

滚动视图 iPhone 内的文本字段

选择器作为弹出框内的输入视图

iPhone iOS如何在应用程序从后台恢复时添加密码/密码锁定屏幕?