转自:http://blog.csdn.net/wozaifeiyang0/article/details/7323606

HighlightFeatures

要素高亮化功能,相信有其他gis开发经营的开发人员都有过相应的实现经验,对于高亮要素,简单说起来就是我们查询的或识别出来的要素进行渲染,让其突出显示而已,这个例子中涉及后面要介绍的识别的内容,我们只简单介绍相关的知识,主要介绍要素对象的渲染(也就是所谓的高亮),来看代码:

mapView.setOnLongPressListener(new OnLongPressListener() {

public void onLongPress(float x,float y) {

try {

if (tiledMapServiceLayer.isInitialized() && selectedLayerIndex >= 0) {

graphicsLayer.removeAll();

/*

*点击地图的点

*/

Point pointClicked = mapView.toMapPoint(x, y);

/*

* 识别任务所需的参数,初始化相应的值

*/

IdentifyParameters inputParameters = new IdentifyParameters();

inputParameters.setGeometry(pointClicked);

inputParameters.setLayers(new int[] { layerIndexes[selectedLayerIndex] });

Envelope env = new Envelope();

mapView.getExtent().queryEnvelope(env);

inputParameters.setSpatialReference(mapView.getSpatialReference());

inputParameters.setMapExtent(env);

inputParameters.setDPI(96);

inputParameters.setMapHeight(mapView.getHeight());

inputParameters.setMapWidth(mapView.getWidth());

inputParameters.setTolerance(10);

/*

* 这是我们自己扩展的类,在其中主要实现了IdentifyTask的请求

*/

MyIdentifyTask mIdenitfy = new MyIdentifyTask();

//执行异步操作并将参数传入异步操作中

mIdenitfy.execute(inputParameters);

else {

Toast toast = Toast.makeText(getApplicationContext(), "Please select a layer to identify features from.",

Toast.LENGTH_SHORT);

toast.show();

}

catch (Exception ex) {

ex.printStackTrace();

}

}

});

上面的代码中,主要给地图添加了一个长按地图事件监听,在事件处理函数中主要做了初始化识别任务的参数及其执行我们扩展的MyIdentifyTask操作,MyIdentifyTask其实就是一个异步请求类,下面我们来看看,这异步请求类做了什么,代码如下:

private class MyIdentifyTask extends AsyncTask<IdentifyParameters, Void, IdentifyResult[]> {

IdentifyTask mIdentifyTask;

@Override

protected IdentifyResult[] doInBackground(IdentifyParameters... params) {

IdentifyResult[] mResult = null;

if (params != null && params.length > 0) {

IdentifyParameters mParams = params[0];//获取参数

try {

mResult = mIdentifyTask.execute(mParams);//执行识别操作

catch (Exception e) {

e.printStackTrace();

}

}

return mResult;

}

@Override

protected void onPostExecute(IdentifyResult[] results) {

// TODO Auto-generated method stub

if (results != null && results.length > 0) {

//生成要素对象数组

highlightGraphics = new Graphic[results.length];

Toast toast = Toast.makeText(getApplicationContext(), results.length + " features identified\n",

Toast.LENGTH_LONG);

toast.setGravity(Gravity.BOTTOM, 0, 0);

toast.show();

for (int i = 0; i < results.length; i++) {

Geometry geom = results[i].getGeometry();

String typeName = geom.getType().name();

//在这里我们进行要素的高亮显示,也就是要素渲染工作

Random r = new Random();

int color = Color.rgb(r.nextInt(255), r.nextInt(255), r.nextInt(255));

if (typeName.equalsIgnoreCase("point")) {

SimpleMarkerSymbol sms = new SimpleMarkerSymbol(color, 20, STYLE.SQUARE);

highlightGraphics[i] = new Graphic(geom, sms);

else if (typeName.equalsIgnoreCase("polyline")) {

SimpleLineSymbol sls = new SimpleLineSymbol(color, 5);

highlightGraphics[i] = new Graphic(geom, sls);

else if (typeName.equalsIgnoreCase("polygon")) {

SimpleFillSymbol sfs = new SimpleFillSymbol(color);

sfs.setAlpha(75);

highlightGraphics[i] = new Graphic(geom, sfs);

}

graphicsLayer.addGraphic(highlightGraphics[i]);

clearButton.setEnabled(true);

}

else {

Toast toast = Toast.makeText(getApplicationContext(), "No features identified.", Toast.LENGTH_SHORT);

toast.show();

}

}

@Override

protected void onPreExecute() {

mIdentifyTask = new IdentifyTask(mapURL);//初始化识别任务实例

}

}

在这里我们可以看到,这个异步类主要做了实例化识别任务对象,并且执行识别任务,返回的结果再进行渲染显示,对于Android中的异步类AsyncTask应该有所了解吧,简单介绍一下他的执行过程,当我们生成AsyncTask实例并执行execute()方法后,他的内部还是执行顺序为onPreExecute()à doInBackground()àonPostExecute()

这样我们的高亮功能示例就介绍完成了,要想实现不同的、五彩缤纷的效果那就需要我们深入了解要素的渲染类及其相关的特性。

ArcGIS for Android示例解析之高亮要素-----HighlightFeatures的更多相关文章

  1. ArcGIS for Android示例解析之空间查询-----QueryTask

    转自:http://blog.csdn.net/wozaifeiyang0/article/details/7331450 QueryTask 查询功能在GIS中是一个不可或缺的重要功能,示例中提供了 ...

  2. ArcGIS for Android示例解析之离线地图-----LocalTiledLayer

    转自:http://blog.csdn.net/wozaifeiyang0/article/details/7327423 LocalTiledLayer 看到这个标题是否是很激动,如题,该示例就是添 ...

  3. Arcgis for android 离线查询

    参考.. 官方API demo ... 各种资料 以及.. ArcGIS for Android示例解析之高亮要素-----HighlightFeatures ttp://blog.csdn.net/ ...

  4. ArcGIS for Android离线数据编辑实现原理

    来自:http://blog.csdn.net/arcgis_mobile/article/details/7565877 ArcGIS for Android中现已经提供了离线缓存图片的加载功能,极 ...

  5. ArcGIS for Android地图控件的5大常见操作

    GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS ...

  6. ArcGIS for Android学习(一)

    GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS ...

  7. 外业数据采集平台(GPS+Android Studio+Arcgis for android 100.2.1)

    外业数据采集平台 1. 综述 在室外,通过平板或者手机接收GPS坐标,实时绘制点.线.面数据,以便为后续进行海域监测.土地确权.地图绘图提供有效数据和依据. 2. 技术路线 Android studi ...

  8. arcgis for android常见问题回答

    Q:arcgis for android最新版本是多少?(2014-7-18) Arcgis for android 10.2.3 sdk 百度盘下载地址:http://pan.baidu.com/s ...

  9. 【Arcgis for android】相关教程收集自网络

    请加入qq群:143501213 一起交流和学习 推荐博客: 张云飞VIR http://www.cnblogs.com/vir56k/tag/arcgis%20for%20android/ arcg ...

随机推荐

  1. iOS 分类思想(1)

    1.需求:如果对一个类在不更改代码的基础上要为它再扩充额外的方法可以使用继承和分类 2.分类 作用:可以在不修改原来类代码的基础上,给某一个类扩充一些对象方法或者类方法,因此一个类可以有多个分类 实现 ...

  2. MySQL中,修改表的某一字段的部分值

    语法:update 表名 set 字段名 = replace(字段名,'替换前内容','替换后的内容') where 条件. 如: 执行sql语句:update student set name = ...

  3. Mysql存储引擎__笔记

    Mysql存储引擎(表类型): Mysql数据库: 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以使存储器上一些文件的集合或者一些内存 数据的内存数据的集合. Mysql数据库是开放源代 ...

  4. opensuse安装mysql-workbench

    首先安装好mysqlserver,做本地测试其实不用安装mysqlclient. 到http://software.opensuse.org/package/mysql-workbench 下载相应版 ...

  5. Apache的多路处理模块MPM:Prefork Worker Event

    如何确认当前apache使用哪种模式 通过/etc/init.d/httpd中的来确认系统apache的运行脚本路径 apachectl=/usr/sbin/apachectl httpd=${HTT ...

  6. webApi实现增删改查操作

    1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...

  7. php学习日志(1)-php介绍

    在学习Php之前,我们要搞懂php是什么.英文全称php: php hypertext preprocessor,即php超文本预处理器.php脚本在服务器上执行,故它是一种服务器编程语言. php文 ...

  8. C# WinForm动态控件实例:口算训练

    昨天晚上回寝室看到室友正在被一个C#课的作业苦恼,作业的内容是编写一个口算训练程序,能够实现随意添加题目数量.于是,喜欢写C#的我就决定解救一下他们. 创建动态控件 既然要动态添加,那就必须使用动态控 ...

  9. PHP学习笔记(1) - 开发环境搭建

    运行环境:phpstudy 它基本包括运行php应用需要的一切,php. apache.mysql,一键傻瓜安装 装好之后只需要配置虚拟主机和修改host文件就可以支持多站点 下载: http://w ...

  10. mysql查看表结构命令

    mysql查看表结构命令 mysql查看表结构命令,如下: desc 表名;show columns from 表名;describe 表名;show create table 表名; use inf ...