iOS 6 中的 Apple 地图方案:如何显示标注/图钉?

Posted

技术标签:

【中文标题】iOS 6 中的 Apple 地图方案:如何显示标注/图钉?【英文标题】:Scheme for Apple Map in iOS 6: how to show a callout/pin? 【发布时间】:2012-10-12 04:23:54 【问题描述】:

使用谷歌地图我可以做到:

http://maps.google.com/maps?q=[Title]@[Lat,Lon]

这将在该地理位置上显示一个图钉,但在 Apple 的文档中:

http://developer.apple.com/library/ios/#featuredarticles/iPhoneURLScheme_Reference/Articles/MapLinks.html

没有办法吗?

【问题讨论】:

我遇到了同样的问题。我找到的最接近的是 MKMapItem 类方法 openMapsWithItems。您可以使用它在地图应用程序中放置一个或多个图钉,并可选择显示两点之间的方向。但是,我不知道如何为您添加的图钉添加标题。 我也遇到了同样的问题。没有MKMap有没有办法做到这一点?如果可以避免的话,我宁愿不带进去! 【参考方案1】:

您确实使用了 MKMapItem 类方法 openMapsWithItems。

诀窍在于 MKMapItem 对象有一个 name 属性。如果您在传递给 openMapsWithItems 的 MKMapItem 对象上设置 name 属性,这些项目会在地图打开时在地图中命名。

所以步骤是:

为您的图钉创建一个 MKPlacemark。您可以提供经纬度坐标或地址信息。

从您的地标创建一个 MKMapItem 在地图项上设置名称属性。

致电[MKMapItem openMapsWithItems:launchOptions:] 打开地图应用并在指定位置放置图钉。请注意,您可以使用此调用来放置多个图钉,或提供两点之间的步行或驾车路线。

【讨论】:

【参考方案2】:
-(void)create_Map


    for (int i=0; i<[arrayMap count]; i++) 

        CLLocationCoordinate2D theCoordinate1;
        theCoordinate1.latitude =[[[arrayMap objectAtIndex:i]objectForKey:@"latitude"] doubleValue];
        theCoordinate1.longitude =[[[arrayMap objectAtIndex:i]objectForKey:@"longitude"] doubleValue];
        addAnnotation = [[AddressAnnotation alloc] initWithCoordinate:theCoordinate1];
        addAnnotation.mTitle=[[arrayMap objectAtIndex:i]objectForKey:@"place"];
        [_locMapView addAnnotation:addAnnotation];

    



    NSArray *coordinates = [_locMapView valueForKeyPath:@"annotations.coordinate"];
    // look for the minimum and maximum coordinate
    NSLog(@"coordinates     %@ %i ",coordinates,[arrayMap count]);

    CLLocationCoordinate2D maxCoord = -90.0f, -180.0f;
    CLLocationCoordinate2D minCoord = 90.0f, 180.0f;
    for(NSValue *value in coordinates) 
        CLLocationCoordinate2D coord = 0.0f, 0.0f;
        [value getValue:&coord];
        if(coord.longitude > maxCoord.longitude) 
            maxCoord.longitude = coord.longitude;

            NSLog(@"maxCoord.longitude     %f  ",maxCoord.longitude);
        
        if(coord.latitude > maxCoord.latitude) 
            maxCoord.latitude = coord.latitude;
        
        if(coord.longitude < minCoord.longitude) 
            minCoord.longitude = coord.longitude;
        
        if(coord.latitude < minCoord.latitude) 
            minCoord.latitude = coord.latitude;
        
    
    // create a region
     MKCoordinateRegion region = 0.0f, 0.0f, 0.0f, 0.0f;
    region.center.longitude = (minCoord.longitude + maxCoord.longitude) / 2.0;
    region.center.latitude = (minCoord.latitude + maxCoord.latitude) / 2.0;
    // calculate the span
    region.span.longitudeDelta = maxCoord.longitude - minCoord.longitude;
    region.span.latitudeDelta = maxCoord.latitude - minCoord.latitude;

    [_locMapView setRegion:region animated:YES];

   // [_locMapView setRegion:region animated:TRUE];
  //  [_locMapView regionThatFits:region];



【讨论】:

【参考方案3】:

这是一个例子:

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(_transaction.lat.doubleValue, _transaction.lon.doubleValue);

MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:location addressDictionary:nil];
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
mapItem.name = _transaction.merchant_name;
[mapItem openInMapsWithLaunchOptions:@MKLaunchOptionsMapTypeKey : @(MKMapTypeStandard),
                                       MKLaunchOptionsShowsTrafficKey : @YES];

【讨论】:

以上是关于iOS 6 中的 Apple 地图方案:如何显示标注/图钉?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 Apple 地图中的路线 - iOS 13.0 中的 Xcode Swift 5?

网址上的 Apple Maps 注释

Apple Watch 显示自定义图块地图

苹果地图找不到地址,IOS 6

Apple iOS6 地图 - 目的地地址 > 显示公司名称而不是纬度/经度

iOS 谷歌地图问题