首页 > 代码库 > Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

AGSDynamicLayer(ForSubclassEyesOnly) Category ReferenceDescriptionThis category organizes the methods that are relevant to subclassing a dynamic layer. Developer can create custom dynamic layers by paying special attention to the methods in this category when subclassing AGSDynamicLayer.Sub-classes must provide valid values for AGSLayer::spatialReference, AGSLayer::fullEnvelope, and AGSLayer::initialEnvelope properties. Other properties on AGSLayer are optional.Since    10.1.1 See also    AGSLayer(ForSubclassEyesOnly) Instance Methods(void)     - requestImageWithWidth:height:envelope:timeExtent: (void)     - setImageData:forEnvelope: PropertiesNSOperationQueue *     queue BOOL     wrapAroundSupported

1、根据新版API(Since10.1.1)看到实例方法已改变,所以需要重写对应的方法requestImageWithWidth:height:envelope:timeExtent:setImageData:forEnvelope:

2、不啰嗦,新版扩展代码参考贴上:

#import "CustomDynamicLayer.h"@interface CustomDynamicLayer ()@property (nonatomic, strong, readwrite) AGSEnvelope *fullEnvelope;@property (nonatomic, strong, readwrite) AGSSpatialReference *spatialReference;@end@implementation CustomDynamicLayer@synthesize fullEnvelope = _fullEnvelope;@synthesize spatialReference = _spatialReference;#pragma mark - Init Methods- (id)initWithFullEnvelope:(AGSEnvelope*)fullEnvelope {    self = [super init];    if (self) {        _spatialReference = fullEnvelope.spatialReference;        _fullEnvelope = fullEnvelope;        [self layerDidLoad];    }    return self;}#pragma mark - Request Image-(void)requestImageWithWidth:(NSInteger)width height:(NSInteger)height envelope:(AGSEnvelope*)env timeExtent:(AGSTimeExtent*)timeExtent {        // get an image,实际项目中有NameID,URL等形式来表达UIImage,
// 如UIImage* img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrl]]];
UIImage *img = [UIImage imageNamed:@"esri_campus"]; // if request envelope instersect with full envelope // of layer then only set image data if ([env intersectsWithEnvelope:self.fullEnvelope]) { [self setImageData:UIImagePNGRepresentation(img) forEnvelope:self.fullEnvelope]; } else { [self setImageData:nil forEnvelope:self.fullEnvelope]; }}@end

3、旧版API方法有差异,通过《AGSDynamicLayerDrawingOperation》类扩展,源码:

#import "CustomDynamicLayer.h"@class AGSLayers;@implementation CustomDynamicLayer@synthesize URL=_URL,imageId=_imageId,envelope=_envelope;#pragma mark - Init- (id)initWithURL:(NSURL*)url imageId:(NSString*)imageId envelope:(AGSEnvelope*)envelope {        if (self = [self init]) {        self.URL = url;        self.imageId = imageId;        self.envelope = _envelope;        _loaded = YES;    }    return self;}#pragma mark - - (AGSUnits)units {    return AGSUnitsUnknown;}- (AGSSpatialReference*) spatialReference {    return self.envelope.spatialReference;}- (AGSEnvelope*)fullEnvelope {    return self.envelope;}- (AGSEnvelope*)initialEnvelope {    return self.envelope;}#pragma mark AGSDynamicLayer- (void)imageRequestOperation:(NSOperation<AGSDynamicLayerDrawingOperation>*)op didGetImage:(UIImage *)image {    NSLog(@"image: %@",image);    [self.exportDelegate dynamicLayer:self exportMapImageOperation:op didFinishWithImage:image];}- (void)imageRequestOperation:(NSOperation<AGSDynamicLayerDrawingOperation>*)op didFailWithError:(NSError *)error {    NSLog(@"Error: %@",error);    if ([self.exportDelegate respondsToSelector:@selector(dynamicLayer:exportMapImageOperation:didFailWithError:)]) {        [self.exportDelegate dynamicLayer:self exportMapImageOperation:op didFailWithError:error];    }}-(NSOperation<AGSDynamicLayerDrawingOperation>*)exportMapImage:(AGSExportImageParams*)exportImageParams {    if (exportImageParams.envelope == nil || CGSizeEqualToSize(CGSizeZero, exportImageParams.size)) {        return nil;    }    NSMutableDictionary *exportParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:                                         @"png", @"type",                                         self.imageId, @"id",                                         nil];    AGSDynamicLayerImageRequestOperation *operation = [[AGSDynamicLayerImageRequestOperation alloc] initWithURL:self.URL                                                                                                  resource:@""                                                                                     queryParameters:exportParams];    operation.target = self;    operation.action = @selector(imageRequestOperation:didGetImage:);    operation.errorAction = @selector(imageRequestOperation:didFailWithError:);    operation.exportImageParams = exportImageParams;        [[AGSRequestOperation sharedOperationQueue] addOperation:operation];    return [operation autorelease];}#pragma mark - dealloc-(void)dealloc{    self.URL = nil;    self.imageId = nil;    self.envelope = nil;    [super dealloc];}@end

内容供参考。

目前针对JS\FLEX\Android\IOS都有调用在线地图、天地图等情况,需要根据对应的API版本进行相关方法重载。

 

Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比