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
分享到:
相关推荐
几何对象绘制系统 功能如下:加载底图模块、地图书签模块、地图基本操作模块(属性表、放缩、移除图层)、绘制基本点线面模块、绘制Curve对象模块。 注:能够在加载底图后对其进行书签操作和其他一些基本操作,这...
对象绘制概述 • 对象:即几何对象,在 GIS 中对离散空间实体的抽象表示。...• WebGL中的绘制处理器对象提供了绘制各类几何对象的功 能,包括:点对象绘制、线对象绘制、面对象绘制和图标 对象绘制。
用Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。使用QGraphics完成。 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独的对象,鼠标...
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 用变换...
主要内容:矢量数据客户端显示方法,点对象客户端标注方法,交互式绘制几何对象的方法,气泡窗口的显示方法,标注对象的选择事件
它类似于几何画板,具有动态变换功能,自由拖动对象仍能保持几何关系不变。它区别于几何画板,操作简单、功能强大、图形美观、虚实自然、空间感极强,是三维图形软件。在首届由金山软件公司携手中国互联网行业协会...
空间对象几何特征编码 绘制16x16网格,并在其上书写实习人的姓名(不少于两个字),字体采用等线体 依据网格对网格中的汉字笔画进行几何特征的编码 按照ArcInfo的Gen格式形成编码文件 编写程序读取Gen格式文件,并将...
RGEOS GIS常用算法,希望提供基本空间几何对象定义、空间量算、空间拓扑操作、空间拓扑关系和空间分析算法的搜集和整理, 同时提供一个几何图形绘制功能用来显示相关算法的结果。
Java绘制不规则几何图形,比如划曲线,写字,线条随意画,如截图所示,甚至可以写出文字: 不规则图形的绘制代码: public class IrregularShapeDemo extends JFrame { GeneralPath gPath= new ...
几何图霸是一款用于绘制动态几何图形的小工具,可帮助广大中学生及教师来创建复杂的几何图形。其功能类似于几何画板,使用容易操作简单。除了可以绘制几何图形外,还能绘制空间向量及曲线动点轨迹等。箭头工具1.点选...
3. 几何图形(满分50分) 版本1:满分 10 分 设计抽象类 GeometricObject 及其子类 Triangle 和Circle。...据选择的几何图形类型来绘制和删除相应的图形,其中相关参数应通过界面输入,并可计算 图形的周长和面积。
在使用 COMSOL 进行了几天令人沮丧的工作后,我刚刚完成了这项工作,最终我意识到我的模型无法正常工作,更糟糕的是,我什至找不到导出几何数据... MPH2STL 或 MPH2STL([],outfile) 在工作空间中搜索几何对象(以链接模
几何图霸是一个用于绘制动态几何图形,辅助中学师生进行数学教学、探索和创造的优秀软件。几何图霸的特色是三维动态,它类似于几何画板,具有动态变换功能,自由拖动对象仍能保持几何关系不变。它区别于几何画板,...
1. 绘制几何对象,如点、线或圆圈 2. 约束对象 3. 要求测量 1. 绘制独立的几何物体 2. 使用结构定义依赖对象 1. ...第一个相切约束: 2. .
XNA纯代码绘制3D几何图形。 XNA资源大家可以搜索我的用户名
ThreeJS几何类,用于在球体上抚摸GeoJSON对象。 快速开始 import { GeoJsonGeometry } from 'three-geojson-geometry'; 或者 const { GeoJsonGeometry } = require('three-geojson-geometry'); 甚至 [removed]...
对Windows窗体对象进行绘制工作,实现与显示设备进行交互。此文件还运用到了Color类用于管理颜色,提供了许多默认的颜色设置,还有画刷,这里画刷用于图形颜色的填充。还有画笔用来画几何图形。还能教你如何运用图形...
在材质和/或几何体节点中使用顶点绘制 顶点绘画比着色器模式更快,并且在没有材质的情况下以 obj 导出 ================== 通过以下方式选择对象或面: 颜色 材料 他们是否有顶点绘画 使用调色板 选定对象, ...
程序提供直线、矩形、圆角矩形、椭圆、多边形等几何对象的绘制,支持对绘图对象边 界轮廓以及内部填充样式的设定,同时可以选定绘图对象,并能够利用鼠标对绘图对象进行 缩放操作。程序以绘图对象为原型构建面向对象...