ArcGIS API for Android 案例教程 8
来源:互联网 发布:360云盘 mac下载 编辑:程序博客网 时间:2024/04/30 03:08
I. 客户端要素
客户端要素图层
ArcGIS Android中提供了一个客户端的要素图层GraphicsLayer,以ArcGIS以往Web开发的经验我们就可以知道这是用于客户端要素绘制的图层。让我们尝试在MapView中再添加一个GraphicsLayer:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/buttonAddGraphic" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="添加客户端要素" />
<com.esri.android.map.MapView android:id="@+id/map"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<com.esri.android.map.ags.ArcGISTiledMapServiceLayer
url="http://server.arcgisonline.com/ArcGIS/rest/services
/World_Imagery/MapServer" />
<com.esri.android.map.GraphicsLayer android:id="@+id/gLayer" />
</com.esri.android.map.MapView>
</LinearLayout>
这里我还添加了一个按钮“添加客户端要素”,我希望在点击这个按钮的时候,程序可以在地图的中央添加一个客户端要素,也就是在GraphicsLayer上添加一个Graphic,因此,我在这个Activity创建的时候添加了这样的一些代码:
gLayer = (GraphicsLayer) findViewById(R.id.gLayer);
gLayer.setRenderer(new SimpleRenderer(new SimpleMarkerSymbol(Color.RED,
20, SimpleMarkerSymbol.STYLE.SQUARE)));
buttonAddGraphic = (Button) findViewById(R.id.buttonAddGraphic);
buttonAddGraphic.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Graphic g = new Graphic();
g.setGeometry(AgsGraphicsLayer.this.map.getCenter());
AgsGraphicsLayer.this.gLayer.addGraphic(g);
AgsGraphicsLayer.this.gLayer.postInvalidate();
}
});
注意一下上面高亮的几行代码,上面对GraphicsLayer的渲染样式进行了定义,表示这个客户端要素图层上需要显示大小为20像素、方形的点要素;下面的代码通过按钮添加了客户端要素,并通知程序马上更新显示。这些代码运行的效果如下:
图 22 通过按钮添加客户端要素
现在让我们在换一种渲染方式,我想用一个小图片来渲染这些要素,比如就用当前程序的图标来表示,应该如何修改呢?查阅API就可以发现熟悉的PictureMarkerSymbol这个符号类,下面就让我们稍微修改一下上面的代码:
Drawable image = AgsGraphicsLayer.this.getBaseContext().getResources()
.getDrawable(R.drawable.icon);
gLayer.setRenderer(new SimpleRenderer(new PictureMarkerSymbol(image)));
这里我们通过获得程序的图标资源,使其作为一个PictureMarkerSymbol的符号,这样修改过的代码运行起来就会是这个样子:
图 23 用图片来显示客户端要素
同样,我们还可以在客户端图层上进行分类渲染或者唯一值渲染,比如我想要一半要素显示红色,一半要素显示绿色,那么我可以使用分类渲染实现:
ClassBreaksRenderer renderer = new ClassBreaksRenderer();
renderer.setField("class");
renderer.setMinValue(0);
ClassBreak class1 = new ClassBreak();
class1.setClassMaxValue(0.5);
class1.setSymbol(new SimpleMarkerSymbol(Color.RED, 20,
SimpleMarkerSymbol.STYLE.CIRCLE));
renderer.addClassBreak(class1);
ClassBreak class2 = new ClassBreak();
class2.setClassMaxValue(1);
class2.setSymbol(new SimpleMarkerSymbol(Color.GREEN, 20,
SimpleMarkerSymbol.STYLE.CIRCLE));
renderer.addClassBreak(class2);
gLayer.setRenderer(renderer);
buttonAddGraphic = (Button) findViewById(R.id.buttonAddGraphic);
buttonAddGraphic.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Graphic g = new Graphic();
g.setAttributeValue("class", Math.random());
g.setGeometry(AgsGraphicsLayer.this.map.getCenter());
AgsGraphicsLayer.this.gLayer.addGraphic(g);
AgsGraphicsLayer.this.gLayer.postInvalidate();
}
});
这样,根据被随机赋值的名为“class”的属性,所有的客户端要素将会被显示成不同的颜色,就像图 24显示的这样。
图 24 使用分类渲染显示客户端要素
- ArcGIS API for Android 案例教程 8
- ArcGIS API for Android 案例教程 1
- ArcGIS API for Android 案例教程 2
- ArcGIS API for Android 案例教程 3
- ArcGIS API for Android 案例教程 4
- ArcGIS API for Android 案例教程 5
- ArcGIS API for Android 案例教程 6
- ArcGIS API for Android 案例教程 7
- ArcGIS API for Android 案例教程 9
- ArcGIS API for Android 案例教程 10
- ArcGIS API for Android 案例教程 11
- ArcGIS API for Android 案例教程 12
- ArcGIS API for Android 案例教程 13
- ArcGIS API for Android 案例教程 14
- ArcGIS API for Android 案例教程 15
- ArcGIS API for Android 案例教程 16
- ArcGIS API for Android 案例教程 17
- 《ArcGIS API for Android 案例教程》PDF版本
- Compute PI in parallel
- 我在飘
- SharePoint 2010系列--SharePoint 2010的数据库
- ArcGIS API for Android 案例教程 7
- asp.net 取路径问题
- ArcGIS API for Android 案例教程 8
- 无刷新图片上传
- SBT 平衡二叉树模板
- sql 把一个字段的值更新为另一个字段的值
- Word中的一些技巧
- 一个从事十年开发软件工程师对职业理解
- 多种排序比较
- 日本孩子的金钱教育:日本妈妈这样给孩子零花钱
- 产品化的困惑