我正在创建一个应用程序,我必须在其中显示我的地方将被绘制的区域的部分,类似于下面的那个。
点击此图片将进一步获取我的应用。但这里只是根据我的经度和纬度生成的静态图像。
任何帮助都会非常感激。 感谢
答案 0 :(得分:35)
这是工作代码。任何人仍然在寻找答案。
NSString *staticMapUrl = [NSString stringWithFormat:@"http://maps.google.com/maps/api/staticmap?markers=color:red|%f,%f&%@&sensor=true",yourLatitude, yourLongitude,@"zoom=10&size=270x70"];
NSURL *mapUrl = [NSURL URLWithString:[staticMapUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:mapUrl]];
由于
答案 1 :(得分:3)
以下是示例代码
NSString *urlString = @"http://maps.googleapis.com/maps/api/staticmap?center=Berkeley,CA&zoom=14&size=200x200&sensor=false";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
UIImage *imageData = [UIImage imageWithData:data];
[yourImageView setImage:imageData];
通过这个,您可以根据您的坐标获得静态图像。 但我不敢说注释的定制可能是不可能的。
答案 2 :(得分:3)
您还可以使用MKMapSnapshotter
,这样您就可以拍摄地图的屏幕截图;
MKMapSnapshotOptions * snapOptions= [[MKMapSnapshotOptions alloc] init];
self.options=snapOptions;
CLLocation * Location = [[CLLocation alloc] initWithLatitude:self.lat longitude:self.long];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(Location.coordinate, 300, 300);
self.options.region = region;
self.options.size = self.view.frame.size;
self.options.scale = [[UIScreen mainScreen] scale];
MKMapSnapshotter * mapSnapShot = [[MKMapSnapshotter alloc] initWithOptions:self.options];
[mapSnapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
if (error) {
NSLog(@"[Error] %@", error);
return;
}
UIImage *image = snapshot.image;//map image
NSData *data = UIImagePNGRepresentation(image);
}];
答案 3 :(得分:1)
您想要做的是基本的mapkit api功能。查看文档:
http://code.google.com/apis/maps/articles/tutorial-iphone.html
我最喜欢的ios博客之一有一个mapkit tutorial here:
答案 4 :(得分:0)
今天有这个,没有谷歌: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/MapKit/MapKit.html 在“创建地图快照”段落中找到代码。 因此,结果与Apple Maps一致。
答案 5 :(得分:0)
我想通过提供一个在图像中间添加注释的方法(带有完成块)来添加@DevC答案。起初,我有兴趣看看是否可以在快照开始之前添加注释,但是MKMapSnapshotter
执行not support this。所以我提出的解决方案是创建一个引脚,将其绘制在地图图像的顶部,然后创建另一个地图+图像的图像。这是我的自定义方法:
-(void)create_map_screenshot:(MKCoordinateRegion)region :(map_screenshot_completion)map_block {
// Set the map snapshot properties.
MKMapSnapshotOptions *snap_options = [[MKMapSnapshotOptions alloc] init];
snap_options.region = region;
snap_options.size = // Set the frame size e.g.: custom_view.frame.size;
snap_options.scale = [[UIScreen mainScreen] scale];
// Initialise the map snapshot camera.
MKMapSnapshotter *map_camera = [[MKMapSnapshotter alloc] initWithOptions:snap_options];
// Take a picture of the map.
[map_camera startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
// Check if the map image was created.
if ((error == nil) && (snapshot.image != nil)) {
// Create the pin image view.
MKAnnotationView *pin = [[MKPinAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:nil];
// Get the map image data.
UIImage *image = snapshot.image;
// Create a map + location pin image.
UIGraphicsBeginImageContextWithOptions(image.size, YES, image.scale); {
[image drawAtPoint:CGPointMake(0.0f, 0.0f)];
CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
// Create the pin co-ordinate point.
CGPoint point = [snapshot pointForCoordinate:region.center];
if (CGRectContainsPoint(rect, point)) {
// Draw the pin in the middle of the map.
point.x = (point.x + pin.centerOffset.x - (pin.bounds.size.width / 2.0f));
point.y = (point.y + pin.centerOffset.y - (pin.bounds.size.height / 2.0f));
[pin.image drawAtPoint:point];
}
}
// Get the new map + pin image.
UIImage *map_plus_pin = UIGraphicsGetImageFromCurrentImageContext();
// Return the new image data.
UIGraphicsEndImageContext();
map_block(map_plus_pin);
}
else {
map_block(nil);
}
}];
}
此方法还需要声明完成标题,如下所示:
typedef void(^map_screenshot_completion)(UIImage *);
我希望这对那些希望在地图图像上添加注释的人有所帮助。
答案 6 :(得分:-2)
要清楚,无法通过地图套件获取特定位置的图像。
您必须使用MKMapView,禁用用户进行平移/缩放,添加注释并处理点击注释以执行您想要执行的操作。