Arcgis API For IOS擴充AGSDynamicLayer新舊版API對比,arcgisios

來源:互聯網
上載者:User

Arcgis API For IOS擴充AGSDynamicLayer新舊版API對比,arcgisios

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版本進行相關方法重載。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.