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共包括下面几个属性

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

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

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

AGSImageServiceIdentifyTask

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

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

AGSImageServiceIdentifyResult

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的栅格值

时间: 2024-10-13 14:33:21

ArcGIS Runtime SDK for iOS中获取ImageServiceLayer的栅格值的相关文章

ArcGIS Runtime SDK for iOS开发系列教程(5)——要素信息的绘制

在客户端绘制点.线.面要素是GIS应用的基本功能,这一讲我将向大家介绍在iOS中如何来实现这一功能.大家都知道在Flex.Silverlight.js中对于要素的绘制都有一个叫GraphicsLayer的图层,那么在ArcGIS for iOS中也不例外,具体的功能和用法也比较类似.同时,在ArcGIS for iOS中还有一个实用的图层叫AGSSketchGraphicsLayer(草图编辑图层),它不仅可以方便客户要素的绘制保存,也是实现离线在线编辑同步的利器. 另外,在Objective-

《ArcGIS Runtime SDK for Android开发笔记》——ArcGIS Runtime SDK概述

1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的应用程序开发包, 转载请注明出处:http://www.cnblogs.com/gis-luq/p/4765993.html 2.ArcGIS Runtime SDKs产品家族 相信大部分开发者对ArcGIS Runtime SDKs这个名称并不生疏,它实际上包含了一系列SDKs,用来开发应用于桌面和移动设备的应用程序.在10.2.2之前的版本中,ArcGIS Runtime SDKs包括ArcGIS Runtime S

《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView

1.前言 在上一篇内容里介绍了 关于ArcGIS Android开发的未来(“Quartz”版Beta)相关内容,期间也提到了关于API接口的重构,开发思路的调整,根据2015UC资料也可以知道新版预计将在明年的时候推出.届时在开发思路上将会往新版迁移. 总的来说,虽然“Quartz”版的开发思路有所变化,但总体变化不大,这里我将继续以现有正式发布版本为主梳理ArcGIS Runtime SDK for Android 开发内容. 参考API版本号:version 10.2.7.后续内容若不做特

《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO

1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑.但是在ArcGIS Runtime SDK for Android的版本中并没有提供类似的功能,实现过程相对较复杂.(10.2.8及以下版本需要用户自定义扩展实现,通过扩展MapOnTouchListener类实现,Quartz版SDK默认自带) 之前有大神gispace封装了DrawTools2.

如何解决ArcGIS Runtime SDK for Android中文标注无法显示的问题

自10.2版本开始,我就一直被ArcGIS Runtime SDK for Android的中文标注无限困扰.无论是驻留于内存中的Graphic 的文本符号TextSymbol,还是新增的离线geodatabase中的中文标注,只要与中文扯上了干系,就无法显示.每次接到用户的电话,我就只能非常官方的仓促应对,文档中明确说明了这一限制啊,确实无能为力:建议您对标注层创建离线缓存吧:您的Android开发经验这么丰富,也可以自行绘制文本来实现:等等等等.其实,自己也觉得Esri的这种疏漏太对不起广大

《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步

1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出处:http://www.cnblogs.com/gis-luq/p/5858062.html 2.demo实现过程 2.1.Demo UI实现 activity_main.xml <?xml version="1.0" encoding="utf-8"?>

ArcGIS Runtime SDK for Android 10.2.5新开发平台安装配置指南

ArcGIS Runtime SDK for Android 10.2.5版本在年前发布,其中一个重大的变化是:新版本使用了新的开发环境,在10.2.5版本中Esri使用了官方提供的新的Android开发工具Android Studio,跟上时代的步伐,而且ArcGIS Runtime SDK for Android在Bintray平台上创建了Esri自己的Maven仓库.在Bintary平台上可以快速方便的发布我们自己的软件版本,最值得欣喜的是,Esri的Android项目现在通过高大上的Gr

《ArcGIS Runtime SDK for Android开发笔记》——(14)、关于ArcGIS Android 架构支持问题

1.前言 随着软硬件的进一步发展,Android设备使用64位的cpu已经开始非常普遍了.但是笔者在测试arm64-v8a(64位架构)的Android设备时,发现使用到ArcGIS Android API的环节出现程序崩溃闪退问题,经过排查,发现ArcGIS Runtime SDK for Android目前(截至10.2.8版本)并不支持arm64-v8a(64位架构),故此文特此记录和说明一下. 转载请注明出处:http://www.cnblogs.com/gis-luq/p/572758

《ArcGIS Runtime SDK for Android开发笔记》——(10)、ArcGIS Runtime SDK支持的空间数据类型

1.前言 移动端的数据来源非常重要,它决定了移动端功能的实现.早期的ArcGIS Android API中,主要以接入在线的数据源为主,因此主要实现在线的地图浏览.查询和路径分析.地理处理等从操作:在v1.0.1版本中,ArcGIS移动产品第一次可以加载松散型切片,自此逐渐掀开了对本地离线数据源的支持,也因此可以在移动端实现越来越受欢迎的离线功能.现在最新的10.2.7 API离线支持数据主要包括紧凑型切片.tpk切片包..geodatabase..shp文件.地名地址库.网络数据集. 转载请注