ArcGis for Android 工作与学习
ArcGis安装
需求
windows7(32/64)
Eclipse3.6以上版本
Android Sdk 2.2以上
Jdk 7
安装步骤
Eclipse安装
下载ArcGis插件
在Eclipse上打开 Help >> Install New Software
创建Arcgis项目
创建方式等同Android项目,不同点创建项目时,选择创建Arcgis项目,然后傻瓜式的next即可。(默认支持的最低sdk是2.2)
项目测试
补充:
Arcgis绘制不同于Android,并不是在UI(main)线程完成绘制,而是使用OpenGL完成的绘制(好处:采用GPU绘制,大大降低了对CPU的依赖,所以绘制会变得更加连贯自然,绘制OpenGL有专门的绘制线程,不会影响主线程)
模拟器测试需注意:
ArcGIS Runtime SDK for Android 使用 OpenGL ES 2.0。如果用模拟器开发,需要使用 Android 4.0.3 以上版本的模拟器(支持 GPU)
ArcGis中主要的控制继承自FramLayout的MapView
MapView
1,MapView是呈现地图数据的容器,MapView可以添加一个或多个图层;图层只有添加到 MapView 容器中才能进行显示。其次,通过 MapView 可以设置地图的显示范围、是否允许被旋转、地图背景、地图的最大/最小分辨率及
其指定当前显示的分辨率/比例尺。最后,MapView 提供了丰富的手势监听接口,通过这些监听器,可以监听各种手势动作,如点击,双击,移动或长按等操作
2,MapView的添加方式两种
XML添加即:
<com.esri.android.map.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="match_parent">
代码中动态添加:
MapView map = new MapView(this);//--new MapView对象
map.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT)); //--设置LayoutParams
tileLayer = new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"); //--切片图层的创建
map.addLayer(tileLayer);//--图层的添加
setContentView(map ); //--将图层添加给窗体,最后显示在手机上.
3,地图的缩放(API)
1,常用的缩放方式
mMapView.zoomIn(...) //--放大
mMapView.zoomOut(...)//--缩小
2,其他缩放方式
mMapView.zoomToResolution(...);
mMapView.zoomToScale(...);
4,常用API的介绍
Envelope env = new Envelope(...);//范围
mMapView.setExtent(env)//设置地图显示范围
mMapView.setScale(295828763);//当前显示的比例尺
mMapView.setResolution(9783.93962049996);//设置当前显示的分辨率
mMapView.setMapBackground(...);//设置地图背景
mMapView.setAllowRotationByPinch(...); //是否允许使用Pinch方式旋转地图
mMapView.setRotationAngle(...); //初始化时将地图旋转多少度,参数为正时按逆时针方向旋转。
mMapView.toMapPoint(x,y);//屏幕坐标转换成空间坐标
mMapView.toScreenPoint(pt);//转换成屏幕坐标对象
5,MapView的listener设置
地图单击监听:OnSingleTapListener(Code中的应用,单击在地图上显示的graphic点时,需要将graphic在地图上的坐标转化成屏幕坐标,然后使用ArcGis for Android中Callout展示相应的数据)
平移监听:OnPanListener //--这里指的是地图平移的监听,Code中的使用Nothing.
长按监听:OnLongPressListener //--地图上某一点的长按监听,Code中的使用,定义当前事件点.
缩放监听:OnZoomListener //--对地图的缩放操作,Code中的使用Nothing.
状态监听:OnStatusChangedListener //--状态监听,主要是当前Mapview的状态变化相对应的CallBack.
pinch 监听:OnPinchListener //--这里是对地图进行多指缩放(地图的放大和缩小)
图层
切片图层、动态图层、本地图层等等
1,ArcGISTiledMapServiceLayer
切片图层,顾名思义,片状的展示数据,设计多线程的操作,故而处理速度快.
2, ArcGISDynamicMapServiceLayer
性能低于(1),主要依赖数据的复杂度.
3,ArcGISImageServiceLayer
基本等同(2)
4,ArcGISFeatureLayer
5, ArcGISLocalTiledLayer
当前项目中正在使用的图层.加载本利离线数据库数据.
6,GraphicsLayer
当前项目中各种图标Icon的展示图层,该图层允许添加Graphic.
例如:
PictureMarkerSymbol mSymbol = new PictureMarkerSymbol(drawable);//Drawable即Android中对应的PNG.
graphicsLayer.addGraphic(new Graphic(point, mSymbol,atttributes)); //--point 绘制点的坐标,symbol图片,attributes需要添加的属性信息.
SpatialReference
空间参考,主要用于坐标系的转换操作(空间坐标系到投影坐标系的转换,反之亦然).
绘制操作
绘制点(Icon.图层.6)
绘制线.
Polyline mPloyline = new Polyline();//--绘制线段的对象
SimpleLineSymbol outline = new SimpleLineSymbol(Color.RED, 3, STYLE.SOLID);//--为线段设置属相,如线段的颜色,样式
mPloyline.setEmpty();//--清空之前的所有数据 仅仅在Down的时候清空即可.
mPloyline.startPath(pressPoint); //--设置绘制的起始位置. 仅仅在Down的时候清空即可
mPolyline.lineTo(movePoint); //--设置当前位置移动的下一个位置点.Move的时候调用此处
Graphic graphic = new Graphic(myCustomPolyline, outline);//--创建Graphic 仅仅一次
mPolygonId = mCustomGraphicLayer.addGraphic(graphic); //--将Graphic添加到图层 仅仅一次
mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline); //--更新当前数据到图层.
Notes:如果你希望绘制的折现最后是闭合状态,这里可通过设置mPloyline.lineTo(pressPoint);
绘制面(等同之上的操作,唯一不同点在于绘制对象)
Polygon mPolygon = new Polygon();
SimpleFillSymbol mPolygonSymbol = new SimpleFillSymbol(color);
...
Graphic graphic = new Graphic(mPolygon,mPolygonSymbol);
mPolygonId = mCustomGraphicLayer.addGraphic(graphic);
mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline);
Notes:这里是对面的绘制操作,面顾名思义就是闭合状态,所以整个绘制过程中面都处于闭合状态;
从开始学习到现在一个月的时间了,懂的实在是太少了,我这里提几个我不懂的问题,希望路过的大神会的留个脚印,解答疑惑.
mMapView.setScale();
mMapView.setResolution();
上述API的区别,虽然他们能起到相同的效果,但是还是没区分出来分辨率和比例尺的最终区别?其次我想应该是有办法转换的,根据是他们有等同的效果?
地理坐标系,空间坐标系(实际坐标系单位为米)?
ArcGis for Android 工作与学习的更多相关文章
- ArcGIS for Android学习(一)
GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS ...
- Android之SurfaceView学习(一)转转
Android之SurfaceView学习(一) 首先我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing ...
- Android开发该学习哪些东西?
开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方 ...
- 我的Android之旅——学习、项目、心态
本文作者: 伯乐在线 - 唐韧 .未经许可,禁止转载!欢迎分享原创到伯乐头条. 来源:唐韧 学习Android也一年多了,项目做了五六个,有大有小,有难有易.一直以来都没有好好总结过,今天周六休息,就 ...
- Android安装器学习笔记(一)
Android安装器学习笔记(一) 一.Android应用的四种安装方式: 1.通过系统应用PackageInstaller.apk进行安装,安装过程中会让用户确认 2.系统程序安装:在开机的时候自动 ...
- 【Arcgis for android】相关教程收集自网络
请加入qq群:143501213 一起交流和学习 推荐博客: 张云飞VIR http://www.cnblogs.com/vir56k/tag/arcgis%20for%20android/ arcg ...
- 【干货推荐】Android开发该学习哪些东西?
开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方 ...
- 创建一个ArcGIS for Android 新项目并显示出本地的地图
1.准备工作:首先要配置好android的开发环境,然后在Eclipse中安装ArcGIS for Android的开发控件:在ArcCatalog中发布好本地的地图服务. 2.安装完ArcGIS f ...
- Arcgis for android 离线查询
参考.. 官方API demo ... 各种资料 以及.. ArcGIS for Android示例解析之高亮要素-----HighlightFeatures ttp://blog.csdn.net/ ...
随机推荐
- Html_color code表示
http://www.computerhope.com/htmcolor.htm#color-codes,如
- [我的试题]Test of String
1.前言 这是我出的第一套题目,话说感觉有点晚了,还是在向总安排下出的.我被安排的是字符串方面的内容,这应该相对而言是比较小众的知识点吧,但是一样的有作用的,也有很神的题目.所谓是NOIP模拟题,其实 ...
- NOI 题库 7084
7084 迷宫问题 描述 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, ...
- python序列
序列基础 序列:python包含6种内建的序列,常用的有:列表.元组.字符串.列表可以修改,元组和字符串不能修改. 索引:从0开始递增,通过索引获取元素:可使用负数索引,从右至左.最后1个元素的位置编 ...
- iOS开发中常见问题集锦
在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...
- 天猫登录源码 POST C#
HttpHelper 请从网络中搜索: public partial class LoginTMall : Form { public LoginTMall() { InitializeCompone ...
- java并发编程(六)Runnable和Thread实现多线程的区别
http://blog.csdn.net/ns_code/article/details/17161237
- Lua输入输出库
1.简单模型 )1.io.write函数: 函数模型为io.write(...) )2.io.read函数: io.read(“*all”) 读取当前输入的整个文件 io.read(”*line“) ...
- split函数的实现
split作为字符串分割函数非常有用,但在C++里面没有这个函数.自己实现一个分割函数: 1.遇到多个分隔符连在一起,则不做分割 2.()内的分隔符不起作用 3.如果只有(,没有)不影响分隔符 #in ...
- 实战java虚拟机的学习计划图(看懂java虚拟机)
啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...