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版本进行相关方法重载。