`

几何对象的绘制

阅读更多


public class DrawGraphicElements extends Activity implements OnClickListener {

	MapView mapView = null;
	ArcGISTiledMapServiceLayer mTileMapLayer = null;
	GraphicsLayer graphicsLayer = null;
	MyTouchListener mTouchListener = null;
	Button geometryButton = null;
	Button clearButton = null;
	String mapURL = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/PublicSafety/PublicSafetyBasemap/MapServer";
	final String[] geometryTypes = new String[] { "绘制点", "绘制线", "绘制区域" };
	int selectedGeometryIndex = -1;

	@SuppressWarnings("serial")
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		mapView = (MapView) findViewById(R.id.map);
		mTouchListener = new MyTouchListener(DrawGraphicElements.this, mapView);
		mapView.setOnTouchListener(mTouchListener);

		geometryButton = (Button) findViewById(R.id.geometrybutton);
		geometryButton.setEnabled(false);
		geometryButton.setOnClickListener(this);

		clearButton = (Button) findViewById(R.id.clearbutton);
		clearButton.setOnClickListener(this);

		mTileMapLayer = new ArcGISTiledMapServiceLayer(mapURL);
		graphicsLayer = new GraphicsLayer();
		mapView.addLayer(mTileMapLayer);
		mapView.addLayer(graphicsLayer);// 添加客户端要素图层

		// 地图加载的时候被调用:检查地图是否可用
		mTileMapLayer.setOnStatusChangedListener(new OnStatusChangedListener() {
			public void onStatusChanged(Object arg0, STATUS status) {
				if (status.equals(OnStatusChangedListener.STATUS.INITIALIZED)) {
					// 可用绘制按钮可用
					geometryButton.setEnabled(true);
				}
			}
		});

	}

	// 地图触摸事件
	class MyTouchListener extends MapOnTouchListener {

		MultiPath mMutiPath;//多路径
		String type = "";
		Point startPoint = null;

		public MyTouchListener(Context context, MapView view) {
			super(context, view);
		}

		public void setType(String geometryType) {
			this.type = geometryType;
		}

		public String getType() {
			return this.type;
		}

		// 绘制一个点
		public boolean onSingleTap(MotionEvent e) {
			if (type.length() > 1 && type.equalsIgnoreCase("POINT")) {
				graphicsLayer.removeAll();//清空要素图层

				Point point = mapView.toMapPoint(new Point(e.getX(), e.getY()));
				// 注意:因手机分辨率的差异,像素点的大小是有差别的
				SimpleMarkerSymbol markerSymbol = new SimpleMarkerSymbol(
						Color.BLUE, 30, STYLE.CIRCLE);
				Graphic graphic = new Graphic(point, markerSymbol);
				graphicsLayer.addGraphic(graphic);

				clearButton.setEnabled(true);
				return true;
			}
			return false;

		}

		//绘制一个点并移动
		public boolean onDragPointerMove(MotionEvent from, MotionEvent to) {
			if (type.length() > 1
					&& (type.equalsIgnoreCase("POLYLINE") || type
							.equalsIgnoreCase("POLYGON"))) {

				//终点
				Point toPoint = mapView.toMapPoint(to.getX(), to.getY());

				if (startPoint == null) {
					graphicsLayer.removeAll();
					//绘制线还是绘制区域
					mMutiPath = type.equalsIgnoreCase("POLYLINE") ? new Polyline(): new Polygon();
					//记录开始点
					startPoint = mapView.toMapPoint(from.getX(), from.getY());
					mMutiPath.startPath((float) startPoint.getX(),(float) startPoint.getY());

					SimpleLineSymbol lineSymbol=new SimpleLineSymbol(Color.BLUE,5);
					Graphic graphic = new Graphic(startPoint,lineSymbol);
					graphicsLayer.addGraphic(graphic);
				}

				mMutiPath.lineTo((float) toPoint.getX(), (float) toPoint.getY());

				return true;
			}
			return super.onDragPointerMove(from, to);

		}

		//绘制一个点后抬起
		@Override
		public boolean onDragPointerUp(MotionEvent from, MotionEvent to) {
			if (type.length() > 1
					&& (type.equalsIgnoreCase("POLYLINE") || type
							.equalsIgnoreCase("POLYGON"))) {
				if (type.equalsIgnoreCase("POLYGON")) {
					mMutiPath.lineTo((float) startPoint.getX(),(float) startPoint.getY());
					graphicsLayer.removeAll();
					//添加面
					Graphic graphic=new Graphic(mMutiPath,new SimpleFillSymbol(Color.WHITE)); 
					graphicsLayer.addGraphic(graphic);
					startPoint = null;
					clearButton.setEnabled(true);
				}
				else{
					//添加线
					Graphic graphic=new Graphic(mMutiPath,new SimpleLineSymbol(Color.BLUE, 5));
					graphicsLayer.addGraphic(graphic);
					startPoint = null;
					clearButton.setEnabled(true);
				}
				return true;
			}
			return super.onDragPointerUp(from, to);
		}
	}

	// 对话框
	protected Dialog onCreateDialog(int id) {
		return new AlertDialog.Builder(DrawGraphicElements.this).setTitle("绘制")
				.setItems(geometryTypes, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						graphicsLayer.removeAll();
						String geomType = geometryTypes[which];
						selectedGeometryIndex = which;
						if (geomType.equalsIgnoreCase(geometryTypes[2])) {
							mTouchListener.setType("POLYGON");
						} else if (geomType.equalsIgnoreCase(geometryTypes[1])) {
							mTouchListener.setType("POLYLINE");
						} else if (geomType.equalsIgnoreCase(geometryTypes[0])) {
							mTouchListener.setType("POINT");
						}
					}
				}).create();
	}

	@Override
	protected void onPause() {
		super.onPause();
		mapView.pause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		mapView.unpause();
	}

	@Override
	public void onClick(View v) {
		if (v == geometryButton) {
			showDialog(0);
		} else if (v == clearButton) {
			graphicsLayer.removeAll();
			clearButton.setEnabled(false);
		}

	}

}
 
  • 大小: 190.6 KB
分享到:
评论

相关推荐

    AE几何对象绘制系统

    几何对象绘制系统 功能如下:加载底图模块、地图书签模块、地图基本操作模块(属性表、放缩、移除图层)、绘制基本点线面模块、绘制Curve对象模块。 注:能够在加载底图后对其进行书签操作和其他一些基本操作,这...

    04-对象绘制.pdf

    对象绘制概述 • 对象:即几何对象,在 GIS 中对离散空间实体的抽象表示。...• WebGL中的绘制处理器对象提供了绘制各类几何对象的功 能,包括:点对象绘制、线对象绘制、面对象绘制和图标 对象绘制。

    Qt鼠标拖动绘制基本几何图形(直线、矩形、圆形、椭圆)

    用Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。使用QGraphics完成。 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独的对象,鼠标...

    VC++几何图形绘制Drawcli源代码文件

    VC++几何图形绘制Drawcli源代码文件,支持绘画的图形有椭圆、矩形、圆形,可以选择背景叠加的方式,绘制结束的对象可以移动,可以制作组态软件。 运行环境:Windows/Visual C/C++

    几何画板基础篇_几何画板作图方法

    1.2 用绘图工具绘制简单的几何图形 1.3 对象的选取、删除、拖动 1.4 对象的标签 2.1 本节概述 2.2 点的作法 2.3 直线型的构造 2.4 圆、圆弧的构造 2.5 图形内部的构造 2.6 点的轨迹的构造 2.7 综合实例 3 用变换...

    SuperMap iClient for JavaScript_绘制对象

    主要内容:矢量数据客户端显示方法,点对象客户端标注方法,交互式绘制几何对象的方法,气泡窗口的显示方法,标注对象的选择事件

    几何图霸 V2.3 破解版

    它类似于几何画板,具有动态变换功能,自由拖动对象仍能保持几何关系不变。它区别于几何画板,操作简单、功能强大、图形美观、虚实自然、空间感极强,是三维图形软件。在首届由金山软件公司携手中国互联网行业协会...

    空间对象几何特征编码-我的名字.zip

    空间对象几何特征编码 绘制16x16网格,并在其上书写实习人的姓名(不少于两个字),字体采用等线体 依据网格对网格中的汉字笔画进行几何特征的编码 按照ArcInfo的Gen格式形成编码文件 编写程序读取Gen格式文件,并将...

    RGEOS:GIS常用算法,希望提供基本空间几何对象定义、空间量算、空间拓扑操作、空间拓扑关系和空间分析算法的搜集和整理,同时提供一个几何图形绘制功能用来显示相关算法的结果

    RGEOS GIS常用算法,希望提供基本空间几何对象定义、空间量算、空间拓扑操作、空间拓扑关系和空间分析算法的搜集和整理, 同时提供一个几何图形绘制功能用来显示相关算法的结果。

    Java绘制不规则几何图形.rar

    Java绘制不规则几何图形,比如划曲线,写字,线条随意画,如截图所示,甚至可以写出文字:  不规则图形的绘制代码:  public class IrregularShapeDemo extends JFrame {   GeneralPath gPath= new ...

    几何图霸v3.31免注册免费版.rar

    几何图霸是一款用于绘制动态几何图形的小工具,可帮助广大中学生及教师来创建复杂的几何图形。其功能类似于几何画板,使用容易操作简单。除了可以绘制几何图形外,还能绘制空间向量及曲线动点轨迹等。箭头工具1.点选...

    大一课程设计---几何图形

    3. 几何图形(满分50分) 版本1:满分 10 分 设计抽象类 GeometricObject 及其子类 Triangle 和Circle。...据选择的几何图形类型来绘制和删除相应的图形,其中相关参数应通过界面输入,并可计算 图形的周长和面积。

    mph2stl:将 COMSOL 几何对象从几何文件或工作区转换为 stl 文件-matlab开发

    在使用 COMSOL 进行了几天令人沮丧的工作后,我刚刚完成了这项工作,最终我意识到我的模型无法正常工作,更糟糕的是,我什至找不到导出几何数据... MPH2STL 或 MPH2STL([],outfile) 在工作空间中搜索几何对象(以链接模

    几何图霸 4.2.1 注册PJ版

    几何图霸是一个用于绘制动态几何图形,辅助中学师生进行数学教学、探索和创造的优秀软件。几何图霸的特色是三维动态,它类似于几何画板,具有动态变换功能,自由拖动对象仍能保持几何关系不变。它区别于几何画板,...

    用几何表达式求解几何问题1

    1. 绘制几何对象,如点、线或圆圈 2. 约束对象 3. 要求测量 1. 绘制独立的几何物体 2. 使用结构定义依赖对象 1. ...第一个相切约束: 2. .

    XNA代码绘制3D对象

    XNA纯代码绘制3D几何图形。 XNA资源大家可以搜索我的用户名

    three-geojson-geometry:ThreeJS几何体可在球体上绘制GeoJSON对象

    ThreeJS几何类,用于在球体上抚摸GeoJSON对象。 快速开始 import { GeoJsonGeometry } from 'three-geojson-geometry'; 或者 const { GeoJsonGeometry } = require('three-geojson-geometry'); 甚至 [removed]...

    如何用画笔,画图板画几何图形

    对Windows窗体对象进行绘制工作,实现与显示设备进行交互。此文件还运用到了Color类用于管理颜色,提供了许多默认的颜色设置,还有画刷,这里画刷用于图形颜色的填充。还有画笔用来画几何图形。还能教你如何运用图形...

    顶点贴图绘制Blender插件 Crayon V2.0.6 Vertex Paint

    在材质和/或几何体节点中使用顶点绘制 顶点绘画比着色器模式更快,并且在没有材质的情况下以 obj 导出 ================== 通过以下方式选择对象或面: 颜色 材料 他们是否有顶点绘画 使用调色板 选定对象, ...

    编程 C++ 绘图板程序 DrawCli

    程序提供直线、矩形、圆角矩形、椭圆、多边形等几何对象的绘制,支持对绘图对象边 界轮廓以及内部填充样式的设定,同时可以选定绘图对象,并能够利用鼠标对绘图对象进行 缩放操作。程序以绘图对象为原型构建面向对象...

Global site tag (gtag.js) - Google Analytics