arcgis for android 图例
来源:互联网 发布:java 服务器 框架 编辑:程序博客网 时间:2024/06/03 03:02
</pre><p><span style="font-size:24px; color:#006600; background-color:rgb(255,255,255)">转自:http://blog.csdn.net/yifei1989/article/details/9383563</span></p><p><span style="font-size:24px; color:#006600; background-color:rgb(255,255,255)">1、加载地图</span></p><p></p><pre name="code" class="java">ArcGISTiledMapServiceLayer atm = new ArcGISTiledMapServiceLayer(serviceUrl);ArcGISFeatureLayer afl = new ArcGISFeatureLayer(layerUrl,ArcGISFeatureLayer.MODE.ONDEMAND);mMapView.addLayer(atm);mMapView.addLayer(afl);mMapView.setOnLongPressListener(this);
2、我们要做一个图例肯定要有一个名字和一个图片,好我们可以定义好实体类。实体类如下:
public class Legend {//名字private String name;//图片private Bitmap bitmap;public Legend(String name, Bitmap bitmap) {super();this.name = name;this.bitmap = bitmap;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Bitmap getBitmap() {return bitmap;}public void setBitmap(Bitmap bitmap) {this.bitmap = bitmap;}}
3、实体类建好后我们就可以写我们的适配器了,我们需要在listview中去展示这个图例,那么这个适配器事实上就很简单了。
class MyAdapter extends BaseAdapter {public int getCount() {return gends.size();}public Object getItem(int position) {return gends.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ListViewHolder holder;if (convertView == null) {holder = new ListViewHolder();convertView = View.inflate(GetLegendActivity.this,R.layout.apdapter, null);holder.legendview = (ImageView) convertView.findViewById(R.id.adapter_image);holder.textview = (TextView) convertView.findViewById(R.id.adapter_text);} else {holder = (ListViewHolder) convertView.getTag();}Legend l = (Legend) getItem(position);holder.legendview.setImageBitmap(l.getBitmap());holder.textview.setText(l.getName());convertView.setTag(holder);return convertView;}}// ListView adapter的Holderclass ListViewHolder {ImageView legendview;TextView textview;}
4、接下来我们需要拿到数据,代码如下:
// 取得图例,并将取得的图例放到List<Legend> 中返回private List<Legend> getLends() {List<Legend> ls = new ArrayList<Legend>();//获取所有的图层Layer[] layers = mMapView.getLayers();for (Layer l : layers) {//判断是否属于ArcGISFeatureLayer类if (l instanceof ArcGISFeatureLayer) {ArcGISFeatureLayer af = (ArcGISFeatureLayer) l;//获取FeatureTypeFeatureType[] types = af.getTypes();//获取Renderer渲染Renderer renders = af.getRenderer();//循环解析types主要用于获取namefor (FeatureType type : types) {FeatureTemplate[] tems = type.getTemplates();for (FeatureTemplate tem : tems) {String name = tem.getName();Bitmap bitmap = createSymbolBitmap(af, tem);Legend le = new Legend(name, bitmap);ls.add(le);}}if (ls.size() == 0) {// 该FeatureLayer不包含FeatureType,此代码和上面的代码相似FeatureTemplate[] templates = af.getTemplates();for (FeatureTemplate template : templates) {Graphic gra = af.createFeatureWithTemplate(template,null);Symbol symbol = renders.getSymbol(gra);//上面两行可以忽略,只是可以获取到symbol和Graphic,如果有用途可以使用Bitmap bitm = createSymbolBitmap(af, template);Legend le = new Legend(template.getName(), bitm);ls.add(le);}}}}return ls;}
上面的代码我们来解释一下。首先我们先初始化一个集合,这个都没问题。紧接着我们直接获取地图的所有图层。之后我们遍历这个地图的图层,我们需要判断这个图层里面哪些属于ArcGISFeatureLayer。也许我们道Renderer用来渲染symbol,而FeatureTemplate似乎用来存储一些信息,至少我们可以通过getname方法来获取他的信息。当然FeatureTemplate可以不用通过FeatureType来获取,这个下面的代码也能看到这种情况,所以下面的代码只是上面代码的一些改动。我们拿到type之后就可以获取FeatureTemplate,之后也就能获取到他的名字。
5、获得图片
private Bitmap createSymbolBitmap(ArcGISFeatureLayer featurelayer,FeatureTemplate featureTemplate) {// determine feature typeFeatureTemplate.DRAWING_TOOL drawing_tool = featureTemplate.getDrawingTool();Geometry geometry = null;//用于判断点线面if (drawing_tool == DRAWING_TOOL.POLYGON) {Polygon polygon = new Polygon();polygon.startPath(0, 0);polygon.lineTo(0, 40);polygon.lineTo(40, 40);polygon.lineTo(40, 0);polygon.lineTo(0, 0);geometry = polygon;} else if (drawing_tool == DRAWING_TOOL.LINE) {Polyline polyline = new Polyline();polyline.startPath(1, 1);polyline.lineTo(39, 39);geometry = polyline;} else if (drawing_tool == DRAWING_TOOL.POINT)geometry = new Point(20, 20);Graphic g = featurelayer.createFeatureWithTemplate(featureTemplate,null);Renderer renderer = featurelayer.getRenderer();Symbol symbol = renderer.getSymbol(g);//画一个40*40的bitmapBitmap bitmap = featurelayer.createSymbolImage(symbol, geometry, 40,40, Color.WHITE);return bitmap;}
这些代码都应该都能看得懂,画点线面的。后面只是创建了一个bitmap并返回,应该不需要讲解。
0 0
- arcgis for android 图例
- ArcGIS for Android 获取FeatureLayer的图例
- ArcGIS for Android 离线数据图例加载
- ArcGIS 10.1 for Desktop 新特性之动态图例
- Arcgis for Silverlight的图例Legend默认折叠
- [arcgis for android]arcgis for android 定位
- ArcGIS for Android
- arcgis for android 学习
- ArcGis for Android定位
- ARCGIS for android
- 说说arcGIS for Android
- ArcGis for Android 开发
- ArcGis for android
- ArcGis for android
- arcgis-for-android 学习指南
- Arcgis for Android:Debug
- arcgis for android 学习
- arcgis for android 学习
- Android开发各类常见错误解决方案【值得收藏】
- 老生常谈之this,constructor ,prototype
- 谈NAND Flash的底层结构和解析
- jabref搜索源
- 传智播客之网上支付笔记(三)
- arcgis for android 图例
- shape的四个角
- 转 树莓派使用标准PC104键盘 设置
- type=‘date’的input标签
- 如何在MyEclipse中使用Maven
- iOS 通知中心(NSNotificationCenter)的使用
- 让背景图适应不同分辨率的设备和不同浏览器
- 居中一个div
- 抢红包