转自: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. Node.js学习心得

    最近花了三四周的时间学习了Node.js ,感觉Node.js在学习过程中和我大学所学的专业方向.NET在学习方法上有好多的相似之处,下面就将我学习的心得体会以及参考的资料总结归纳如下,希望对于刚入门 ...

  2. js中的referrer返回上一页使用介绍

    js中的referrer的用法举例. js完整代码:  <script language="javascript">  var refer=document.refer ...

  3. Python prettytable的使用方法

    Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+------------+----------------- ...

  4. codeforces edu round3

    B. The Best Gift  传送门:http://codeforces.com/problemset/problem/609/B Emily's birthday is next week a ...

  5. PL/SQL — 存储过程

    存储过程子程序的一种类型,能够完成一些任务,作为schema对象存储于数据库.是一个有名字的PL/SQL代码块,支持接收或不接受参数,同时也支持参数输出.一个存储过程通常包含定于部分,执行部分,Exc ...

  6. 【BZOJ1823】 [JSOI2010]满汉全席

    Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...

  7. dvd的舞女

    [题目描述] 众所周知,dvd是一个爱做梦的好孩子. 但是不知道为什么最近dvd总是梦到一群舞女 众所周知,dvd是一个爱琢磨的好孩子. 但是不知道为什么dvd最近一直想不明白为什么 终于dvd发现了 ...

  8. vs运行代码版本不一致删除缓存

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files

  9. 输出排名第k的法雷级数的值;

    #include<cstdio> #include<cstring> using namespace std; int k,n; void dfs(int a,int b,in ...

  10. Oracle----Key Word

    desc|describe table_name DCL----column ----add -- add one column alter table product ); -- add multi ...