ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值


本文原创,转载请注明原创地址 http://blog.csdn.net/dongyu1009/article/details/37697389


        用AGSImageServiceIdentifyTask可以获取ArcGISImageServiceLayer图层中的栅格值。这涉及了三个比较重要的类:AGSImageServiceIdentifyParameters、AGSImageServiceIdentifyTask和AGSImageServiceIdentifyResult,还有一个delegate代理类。下面一一简介一下:


AGSImageServiceIdentifyParameters

AGSImageServiceIdentifyParameters是用来设置identify参数的,可以用类方法imageServiceIdentifyParameters构造,即

[AGSImageServiceIdentifyParameters AGSImageServiceIdentifyParameters];

AGSImageServiceIdentifyParameters共包括下面几个属性

ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值

---geometry用于指定查询栅格的位置,常常是一个AGSPoint,也可以用AGSPolygon来查询一个区域的栅格值。

---mosaicRule是镶嵌规则,默认为AGSMosaicMethodCenter。

---pixelSizeX和pixelSizeY用来设置象元大小,默认为被查询栅格图层的象元大小。在象元大小范围内的所有镶嵌数据集都会被查询到。


AGSImageServiceIdentifyTask

实例化的时候需要设置查询的URL,如果需要验证的话需要设置credential

其他的没什么可介绍的,在查询的之前已经要为查询设置代理,查询的时候用- (NSOperation*) identifyWithParameters:(AGSImageServiceIdentifyParameters *)      identifyParams方法。

 

AGSImageServiceIdentifyResult


ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值

catelogItems是返回的栅格目录(我也不知道怎么翻译啦,一个Raster Catelog是Raster Dataset栅格数据集的集合)。

catalogItemVisibilities顾名思义,栅格目录是否可见

location就是identify的查询位置

name就是identify查询的属性名称

objectId不解释了,就是一个id

properties是一个属性的集合

value就是name对应属性的象元值


AGSImageServiceIdentifyDelegate

代理是用来获得查询结果用的,必须实现下面两个方法,第一个是identify查询失败的时候调用的,第二个是identify查询成功调用的,会获得一个AGSImageServiceIdentifyResult对象。

(void)     - imageServiceIdentifyTask:operation:didFailToIdentifyWithError:

(void)     - imageServiceIdentifyTask:operation:didIdentifyWithResult:


下面是具体的使用方法。

1、为ViewController设置代理,并实现查询完成的两个方法:

在ViewController.h中

#import <UIKit/UIKit.h>
#define IMAGE_SERVICE "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/World/MODIS/ImageServer"</p>

@interface ViewController : UIViewController <AGSImageServiceIdentifyDelegate>

@property (strong, nonatomic) AGSImageServiceIdentifyTask *task;

@end

在ViewController.m中

- (void)imageServiceIdentifyTask:(AGSImageServiceIdentifyTask*)identifyTask operation:(NSOperation*)op didIdentifyWithResult:(AGSImageServiceIdentifyResult *)result{
    NSLog(@"properties :%@", result.properties);
    NSLog(@"value :%@", result.value);
    NSLog(@"name : %@", result.name);
    NSLog(@"catalogItems count :%d", [[result.catalogItems features] count]);
}

- (void)imageServiceIdentifyTask:(AGSImageServiceIdentifyTask*)identifyTask operation:(NSOperation*)op didFailToIdentifyWithError:(NSError *)error{
    NSLog(@"fault");
}


2、设置AGSImageServiceIdentifyTask:

    self.task = [[AGSImageServiceIdentifyTask alloc] initWithURL:[NSURL URLWithString:IMAGE_SERVICE]];
    self.task.delegate = self;



3、设置AGSImageServiceIdentifyParameters:

    
    AGSImageServiceIdentifyParameters *param = [AGSImageServiceIdentifyParameters imageServiceIdentifyParameters];
    
    param.geometry = [AGSPoint pointWithX:116.425541 y:39.969147 spatialReference:[AGSSpatialReference spatialReferenceWithWKID:4326]];
    
    [self.task identifyWithParameters:param];


完整的代码如下:

ViewController.h中

//  ViewController.h
//  Wang
//
//  Created by dongyu on 14-7-10.
//  Copyright (c) 2014年 org.reach. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <AGSImageServiceIdentifyDelegate>

@property (strong, nonatomic) AGSImageServiceIdentifyTask *task;

@end

在ViewController.m中

//  ViewController.m
//  Wang
//
//  Created by dongyu on 14-7-10.
//  Copyright (c) 2014年 org.reach. All rights reserved.
//

#import "ViewController.h"
#define IMAGE_SERVICE @"http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/World/MODIS/ImageServer"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.task = [[AGSImageServiceIdentifyTask alloc] initWithURL:[NSURL URLWithString:IMAGE_SERVICE]];
    self.task.delegate = self;
    
    AGSImageServiceIdentifyParameters *param = [AGSImageServiceIdentifyParameters imageServiceIdentifyParameters];
    
    param.geometry = [AGSPoint pointWithX:116.425541 y:39.969147 spatialReference:[AGSSpatialReference spatialReferenceWithWKID:4326]];
    
    [self.task identifyWithParameters:param];
    
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - delegate
- (void)imageServiceIdentifyTask:(AGSImageServiceIdentifyTask*)identifyTask operation:(NSOperation*)op didIdentifyWithResult:(AGSImageServiceIdentifyResult *)result{
    NSLog(@"properties :%@", result.properties);
    NSLog(@"value :%@", result.value);
    NSLog(@"name : %@", result.name);
    NSLog(@"catalogItems count :%d", [[result.catalogItems features] count]);
}

- (void)imageServiceIdentifyTask:(AGSImageServiceIdentifyTask*)identifyTask operation:(NSOperation*)op didFailToIdentifyWithError:(NSError *)error{
    NSLog(@"fault");
}

@end



demo的下载地址:

http://download.csdn.net/detail/dongyu1009/7623695


新手发博文,有不好的地方,望大家批评指正。


ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值,布布扣,bubuko.com

ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值

上一篇:iOS 去掉导航栏的边界黑线&去掉搜索框的边界黑线和其中文本输入框的阴影 - 解决方案


下一篇:一种Android数据请求框架