转自:http://blog.csdn.net/wozaifeiyang0/article/details/7323606
HighlightFeatures
要素高亮化功能,相信有其他gis开发经营的开发人员都有过相应的实现经验,对于高亮要素,简单说起来就是我们查询的或识别出来的要素进行渲染,让其突出显示而已,这个例子中涉及后面要介绍的识别的内容,我们只简单介绍相关的知识,主要介绍要素对象的渲染(也就是所谓的高亮),来看代码:
mapView.setOnLongPressListener(new OnLongPressListener() { public try { if (tiledMapServiceLayer.isInitialized() graphicsLayer.removeAll(); /* *点击地图的点 */ Point pointClicked = mapView.toMapPoint(x, y); /* * 识别任务所需的参数,初始化相应的值 */ IdentifyParameters inputParameters inputParameters.setGeometry(pointClicked); inputParameters.setLayers(new int[] { 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 //执行异步操作并将参数传入异步操作中 mIdenitfy.execute(inputParameters); } else { Toast toast = Toast.makeText(getApplicationContext(), "Please Toast.LENGTH_SHORT); toast.show(); } } catch (Exception ex) { ex.printStackTrace(); } } }); |
上面的代码中,主要给地图添加了一个长按地图事件监听,在事件处理函数中主要做了初始化识别任务的参数及其执行我们扩展的MyIdentifyTask操作,MyIdentifyTask其实就是一个异步请求类,下面我们来看看,这异步请求类做了什么,代码如下:
private IdentifyTask mIdentifyTask; @Override protected IdentifyResult[] IdentifyResult[] mResult = null; if (params IdentifyParameters mParams = params[0];//获取参数 try { mResult = mIdentifyTask.execute(mParams);//执行识别操作 } catch (Exception e) e.printStackTrace(); } } return mResult; } @Override protected // TODO Auto-generated method stub if (results //生成要素对象数组 highlightGraphics Toast toast = Toast.makeText(getApplicationContext(), Toast.LENGTH_LONG); toast.setGravity(Gravity.BOTTOM, 0, 0); toast.show(); for (int i Geometry geom = results[i].getGeometry(); String typeName = geom.getType().name(); //在这里我们进行要素的高亮显示,也就是要素渲染工作 Random r = new Random(); int color if (typeName.equalsIgnoreCase("point")) SimpleMarkerSymbol sms highlightGraphics[i] = new Graphic(geom, } else SimpleLineSymbol sls highlightGraphics[i] = new Graphic(geom, } else SimpleFillSymbol sfs sfs.setAlpha(75); highlightGraphics[i] = new Graphic(geom, } graphicsLayer.addGraphic(highlightGraphics[i]); clearButton.setEnabled(true); } } else { Toast toast = Toast.makeText(getApplicationContext(), "No toast.show(); } } @Override protected mIdentifyTask } } |
在这里我们可以看到,这个异步类主要做了实例化识别任务对象,并且执行识别任务,返回的结果再进行渲染显示,对于Android中的异步类AsyncTask应该有所了解吧,简单介绍一下他的执行过程,当我们生成AsyncTask实例并执行execute()方法后,他的内部还是执行顺序为onPreExecute()à
doInBackground()àonPostExecute()
这样我们的高亮功能示例就介绍完成了,要想实现不同的、五彩缤纷的效果那就需要我们深入了解要素的渲染类及其相关的特性。