首页 > 代码库 > 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对比
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。