Mapkit上的XCode天气雷达地图叠加

时间:2012-10-15 19:53:35

标签: overlay mapkit xcode4.3 mkoverlay

我似乎无法通过从网址加载自定义地图叠加来解决这个问题。正如你可以看到它从一个URL加载天气叠加层,将其添加到mapview但它似乎没有工作,我不知道为什么它不起作用。任何帮助表示赞赏。

radarView.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

radarView.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

0 个答案:

没有答案