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
分享到:
相关推荐
YOLOv8中加入CBAM注意力机制,适合目标检测方向新手小白对YOLOv8作出改进,开箱即用,上传不易,小伙伴拿走的同时请顺手一键三连哈
【资源概览】 高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的语音导盲系统设计源代码+原理图+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!
HTML+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页的设计制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。
PVG800S-800mm皮带检测报告(TABG-ZXJ 2021-069).pdf
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
HTML+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页的设计制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。
【资源说明】 优秀项目 基于STM32F103单片机的无线测距系统源码+详细文档+全部数据资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
工作总结PPT15.pptx
TortoiseGit安装包和中文语言包
氢能行业深度报告之三:质子交换膜PEM市场空间广阔,国产替代进行时
Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
【资源概览】 高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机+openCV的云台色彩追踪系统源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!
NB-T51004-2012井巷揭煤地质说明书编制规范.pdf
工作总结PPT12.pptx
MT T 898-2000 煤炭电法勘探规范.pdf
决策树 基于 Python 实现的决策树预测波士顿房价
本文介绍打印机初步配置,以及实现方法。标签主要展示基本信息以及二维码。首先设置打印机纸张大小,纸张高宽度以实际标签为准,设置好后可打印测试页测试一下,以ZDesigner GX430t打印机为例。标签打印C#控制程序源代码,适合自己进行二次开发。软件可以自己编辑标签,可以自动条形码或二维码的位置。标签打印是现代物流和仓储管理中不可或缺的重要环节之一。在许多行业中,如物流、零售和制造业等,标签打印技术被广泛应用于追踪和管理货物、库存和资产。为了满足不同标签打印需求,许多开发者将目光投向了C#编程语言,并且通过自定义控制程序源代码的方式实现标签打印的二次开发。 C#是一种面向对象的高级编程语言,由微软公司开发并广泛应用于Windows系统和.NET框架。它具有强大的功能和灵活的语法结构,使得开发者能够轻松地处理各种复杂的任务。在标签打印的场景下,C#语言提供了丰富的库和工具,使得开发者能够方便地控制打印机、编辑标签布局和生成条形码或二维码等。
【资源概览】 高分项目 基于STM32单片机的智能调速风扇源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的智能调速风扇源代码+项目资料齐全+教程文档.zip高分项目 基于STM32单片机的智能调速风扇源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!
2023-06-30-国信证券--储能产业链周评(6月第4周):储能供应商频获海外大单,百亿氢能投资落地鄂尔多斯
模拟退火算法(Simulated Annealing,SA)是一种基于概率的算法,其灵感来源于固体退火原理。模拟退火算法最早由N. Metropolis等人在1953年提出,随后在1983年由S. Kirkpatrick等人成功地将退火思想引入到组合优化领域。该算法基于物理中固体物质的退火过程与一般组合优化问题之间的相似性,通过赋予搜索过程一种时变且最终趋于零的概率突跳性,从而有效避免陷入局部极小并最终趋于全局最优。 模拟退火算法的基本思想是从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解。算法的主要步骤如下: 初始化:设置初始温度T(充分大)、初始解状态S(算法迭代的起点)以及每个T值的迭代次数L。 对k=1,...,L进行以下操作: 产生新解S':通过对当前解进行变换(如互换、置换等)产生新解。 计算增量ΔT=C(S')-C(S),其中C(S)为评价函数。 判断新解是否接受:若ΔT<0,则接受S'作为新的当前解;否则以概率exp(-ΔT/T)接受S'作为新的当前解。 如果满足终止条件(如连续若干个新解都没有被接受),则输出当前解