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?