ArcgisAPIForIOS扩展AGSDynamicLayer新旧版API对比

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

AGSDynamicLayer(ForSubclassEyesOnly)Category Reference

Description

This 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 mustPRovide valid valuesfor AGSLayer::spatialReference, AGSLayer::fullEnvelope, and AGSLayer::initialEnvelope properties. Other properties on AGSLayer are optional.

Since10.1.1See also

AGSLayer(ForSubclassEyesOnly)

Instance Methods(void) - requestImageWithWidth:height:envelope:timeExtent:

(void) - setImageData:forEnvelope:Properties

NSOperationQueue * queue

BOOL wrapAroundSupported

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

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

#import"CustomDynamicLayer.h"@interfaceCustomDynamicLayer ()

@property (nonatomic, strong, readwrite) AGSEnvelope*fullEnvelope;

@property (nonatomic, strong, readwrite) AGSSpatialReference*spatialReference;@end@implementationCustomDynamicLayer@synthesizefullEnvelope =_fullEnvelope;@synthesizespatialReference =_spatialReference;#pragmamark - Init Methods

- (id)initWithFullEnvelope:(AGSEnvelope*)fullEnvelope {

self=[super init];if(self) {

_spatialReference=fullEnvelope.spatialReference;

_fullEnvelope=fullEnvelope;

[self layerDidLoad];

}returnself;

}#pragmamark - 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 dataif([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"@classAGSLayers;@implementationCustomDynamicLayer@synthesizeURL=_URL,imageId=_imageId,envelope=_envelope;#pragmamark - 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;

}returnself;

}#pragmamark -

-(AGSUnits)units {returnAGSUnitsUnknown;

}- (AGSSpatialReference*) spatialReference {returnself.envelope.spatialReference;

}- (AGSEnvelope*)fullEnvelope {returnself.envelope;

}- (AGSEnvelope*)initialEnvelope {returnself.envelope;

}#pragmamark 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)) {returnnil;

}

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];

}#pragmamark - dealloc

-(void)dealloc{

self.URL=nil;

self.imageId=nil;

self.envelope=nil;

[super dealloc];

}@end

内容供参考。

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航