我似乎无法通过从 url 加载自定义地图覆盖来解决这个问题。正如您所看到的,它从将其添加到地图视图的 URL 加载天气叠加层,但它似乎不起作用,我不明白为什么它不起作用。任何帮助表示赞赏。
雷达视图.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface radarViewController : UIViewController <MKMapViewDelegate> {
MKMapView *mapview;
}
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readwrite) MKCoordinateRegion region;
@property (nonatomic, readonly) MKMapRect visibleRect;
@property (nonatomic, retain) IBOutlet MKMapView *mapview;
-(IBAction)setMap:(id)sender;
-(IBAction)goBack;
@end
雷达视图.m
#import "radarViewController.h"
#import "MapOverlay.h"
#import "MapOverlayView.h"
@implementation radarViewController
@synthesize mapview,coordinate,visibleRect,region;
- (void)viewDidLoad
{
[super viewDidLoad];
[mapview setDelegate:self];
[mapview setZoomEnabled:YES];
[mapview setScrollEnabled:YES];
[mapview setMapType:MKMapTypeSatellite];
NSURL *imageURL = [NSURL URLWithString: @"http://radar.weather.gov/ridge/Conus/RadarImg/latest_radaronly.gif"];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
//UIImage * image = [UIImage imageWithData:imageData];
MapOverlay *overlay = [[MapOverlay alloc] initWithImageData:imageData withLowerLeftCoordinate:CLLocationCoordinate2DMake(21.65253888888889, -129.314525) withUpperRightCoordinate:CLLocationCoordinate2DMake(50.406625, -65.60158888888888)];
[mapview addOverlay:overlay];
[mapview setVisibleMapRect:[overlay boundingMapRect]];
[overlay release];
visibleRect = [mapview mapRectThatFits:overlay.boundingMapRect];
mapview.visibleMapRect = visibleRect;
region = MKCoordinateRegionForMapRect(visibleRect);
region.center.latitude = 26.503292;
region.center.longitude = -82.032353;
region.span.longitudeDelta = 0.4f;
region.span.latitudeDelta = 0.4f;
[mapview regionThatFits:region];
[mapview setRegion:region animated:YES];
[mapview setClipsToBounds:true];
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
MapOverlay *mapOverlay = overlay;
MapOverlayView *mapOverlayView = [[[MapOverlayView alloc] initWithOverlay:mapOverlay] autorelease];
return mapOverlayView;
}
@end
MapOverlay.h 和 .m
#import <MapKit/MapKit.h>
@interface MapOverlay : NSObject <MKOverlay> {
MKMapRect boundingMapRect;
}
@property (nonatomic, retain) NSData *radarData;
- (id) initWithImageData: (NSData*) imageData withLowerLeftCoordinate:
(CLLocationCoordinate2D) lowerLeftCoordinate withUpperRightCoordinate:
(CLLocationCoordinate2D) upperRightCoordinate;
@end
#import "MapOverlay.h"
@implementation MapOverlay
@synthesize radarData,coordinate,boundingMapRect;
- (id) initWithImageData: (NSData*) imageData withLowerLeftCoordinate: (CLLocationCoordinate2D) lowerLeftCoordinate withUpperRightCoordinate: (CLLocationCoordinate2D) upperRightCoordinate{
self.radarData = imageData;
MKMapPoint lowerLeft = MKMapPointForCoordinate(lowerLeftCoordinate);
MKMapPoint upperRight = MKMapPointForCoordinate(upperRightCoordinate);
boundingMapRect = MKMapRectMake(lowerLeft.x, upperRight.y, upperRight.x - lowerLeft.x, upperRight.y - lowerLeft.y);
return self;
}
- (CLLocationCoordinate2D)coordinate
{
return MKCoordinateForMapPoint(MKMapPointMake(MKMapRectGetMidX(boundingMapRect),
MKMapRectGetMidY(boundingMapRect)));
}
- (MKMapRect)boundingMapRect
{
return boundingMapRect;
}
@end
MapOverlayView.h 和 .m
#import <MapKit/MapKit.h>
@interface MapOverlayView : MKOverlayView {
CGFloat tileAlpha;
}
@property (nonatomic, assign) CGFloat tileAlpha;
@end
#import "MapOverlayView.h"
#import "MapOverlay.h"
@implementation MapOverlayView
@synthesize tileAlpha;
- (id)initWithOverlay:(id <MKOverlay>)overlay
{
if (self = [super initWithOverlay:overlay]) {
self.tileAlpha = 0.8;
}
return self;
}
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
MapOverlay *mapOverlay = (MapOverlay *)self.overlay;
CGContextSetAlpha(context, tileAlpha);
UIImage *image = [[UIImage alloc] initWithData:mapOverlay.radarData];
NSString *strData = [[NSString alloc]initWithData:mapOverlay.radarData encoding:NSUTF8StringEncoding];
NSLog(@"%@",strData);
MKMapRect theMapRect = [self.overlay boundingMapRect];
CGRect theRect = [self rectForMapRect:theMapRect];
UIGraphicsPushContext(context);
[image drawInRect:theRect blendMode:kCGBlendModeNormal alpha:1.0];
UIGraphicsPopContext();
[image release];
}
- (BOOL)canDrawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
{
return YES;
}
@end