ArcGIS for Android 体验(二) 绘制标绘

本文详细介绍了在ArcGIS for Android中如何进行地图标绘,包括标绘的基础结构、图形元素如point、polyline和polygon的创建,以及如何设置Menu和触碰监听来实现绘制功能。通过示例代码展示了graphic的构造过程和逻辑判断,强调了geometry与symbol的正确分配是关键,同时指出了polyline和polygon的区别。
摘要由CSDN通过智能技术生成

前言

在前文已经http://blog.csdn.net/david_ocean/article/details/13296125中已经说到了对于地图图层的添加,其中特意说明了矢量图层的特质,在线矢量图层的加载和离线矢量图层的权限问题。

         而本章的重点,是通过矢量图层进行操作,完成绘制。在ArcGIS for Android中,矢量图层的离线加载是需要认证许可。而在mapview中自行创建的矢量图层,可以将矢量信息进行表达,只是无法存储而已。

查看API中,可知道,对于加载的在线矢量地图ArcGISFeatureLayer是GraphicsLayer的子类,而我们绘制信息的图层也是GraphicLayer图层。

体验

标绘基础结构

         在ArcGIS for Android中,对于绘制的基本元素之一是Geometry,例如我们最常用也是最重要的就是:point,polyline,polygon。他们包含地理坐标信息和类型信息。在ArcGIS for Android中对于他们有自己的定义,请看看示意:

          最最基本的单位是point。然后通过point可以自己组成一个点要素,然后若是想要组成polyline或者polyline的话,那么需要进行更多操作。Polyline和polygon的基本组成要素是line,可以理解成线段。而line是需要point来组成。每个line有且仅有两个point,也就是两点组成一段,然后又line来组成polyline和polygon。这和我们以往的理解有些不同。在以往的理解中,polyline和polygon都是由point组成的。所以现在有了这个不同,在这里本人就要特别提一下。

         大家看到这个point,polyline以及polygon了,这些只能算是要素,自己是没有外形的。我们需要为其设定外形,点的形状,颜色,大小。线的粗细,颜色,虚线与否。面的透明度,颜色以及填充物样式等。这些在ArcGIS for Android中为Symbol中进行设定。Symbol的基本结构大概如此:

        一个真正的标绘Graphic的基本组成单元是由Geometry和Symbol共同完成的,所以我们在设定标绘的时候,要使用两者一同设定。下文是Graphic的构造器的说明:

工程的建立

Menu的设定

在谈及完Graphic的结构原理后,现在需要做的是对于工程的建立来实现标绘的添加。

在界面中,不修改main.xml,整个屏幕不添加控件,让其显示最完成。然后所有操作设定在menu上面。我分成点,线,面三种类型的绘制,每种类型有一些选择来区别标绘内容。

         Menu设定的实现代码:

//菜单的加载
	@Override
	public boolean onCreateOptionsMenu(Menu menu){
		//加载点选择菜单
		SubMenu pointSubMenu=menu.addSubMenu("点");
		pointSubMenu.setHeaderTitle("选择绘制的点");
		pointSubMenu.add(0, 0, 0, "图点");
		pointSubMenu.add(0, 1, 0, "红点");
		pointSubMenu.add(0, 2, 0, "蓝点");
		pointSubMenu.add(0, 3, 0, "绿点");
		//加载线选择菜单
		SubMenu lineSubMenu=menu.addSubMenu("线");
		lineSubMenu.setHeaderTitle("选择绘制的线");
		lineSubMenu.add(1,0,0,"白线");
		lineSubMenu.add(1, 1, 0, "红线");
		lineSubMenu.add(1, 2, 0, "蓝虚线");
		lineSubMenu.add(1, 3, 0, "黄粗线");
		//加载面选择菜单
		SubMenu gonMenu=menu.addSubMenu("面");
		gonMenu.setHeaderTitle("选择绘制的面");
		gonMenu.add(2, 0, 0, "红面");
		gonMenu.add(2, 1, 0, "绿面半透明");
		gonMenu.add(2,2,0,"蓝面虚线填充");
		
		return super.onCreateOptionsMenu(menu);
	}
	//菜单项被单击的事件
	@Override
	public boolean onOptionsItemSelected(MenuItem mi){
		isChoose=true;
		//判断是在哪个groupid里面的
		switch (mi.getGroupId()) {
		case 0:
			drawType=Geometry.Type.POINT;
			switch (mi.getItemId()) {
				case 0:
						Drawable drawable=this.getResources().getDrawable(R.drawable.icon);
						symbol=new PictureMarkerSymbol(drawable);
					break;
					
				case 1:
					symbol=new SimpleMarkerSymbol(Color.RED, 14, SimpleMarkerSymbol.STYLE.CIRCLE);
					break;
					
				case 2:
					symbol=new SimpleMarkerSymbol(Color.BLUE, 14, SimpleMarkerSymbol.STYLE.CIRCLE);
					break;
					
				case 3:
					symbol=new SimpleMarkerSymbol(Color.GREEN, 14, SimpleMarkerSymbol.STYLE.CIR
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值