Arcgis API for Android之GPS定位
来源:互联网 发布:哥林多前书13章 知乎 编辑:程序博客网 时间:2024/05/01 00:47
欢迎大家加入Arcgis API for Android的QQ交流群:337469080
先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己以前在做相关工作的时候做过相关的东西,所以就总结一下,给大家共享出来,由于本人水平有限,bug是在所难免,还望有更高的高人批评指正。废话不多说,直接进入主题。
要想在地图上定位并将定位结果实时显示出来,启示逻辑上很简单:首先,接收并解析GPS或者网络的位置信息,一般来说,接受的位置信息是WGS84的经纬度的,但是我们的地图的投影一般都不会是WGS84的,所以,位置信息接收来了得做一次坐标转换,目前,坐标转换的方式有七参数或者四参数的方式,但是这两种参数转换的算法和方式都不怎么方便,还好,Arcgis支持从WGS84到地图投影的转换,转换完成之后再在地图上将该点展示出来并间隔刷新即可实现。下面我来说说我的实现方式:
1、定义一个GraphicsLayer并将之添加到map
GraphicsLayer gLayerGps;
……
gLayerGps = new GraphicsLayer();mapview.addLayer(gLayerGps);
2、定义一个PictureMarkerSymbol用来设置位置显示的样式
PictureMarkerSymbol locationSymbol;
locationSymbol = new PictureMarkerSymbol(this.getResources().getDrawable(R.drawable.location));
LocationManager locMag;//要定位在地图中的位置,需要知道当前位置,而当前位置有Location对象决定,//但是,Location对象又需要LocationManager对象来创建。//创建LocationManager的唯一方法locMag = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);//获得Provider列表final List<String> providers=locMag.getProviders(true);
4、循环Provider,根据Provider获取位置信息
//循环Provider,根据Provider获取位置信息 for(String provider:providers) { loc = locMag.getLastKnownLocation(provider); LocationListener locationListener = new LocationListener(){ /** * 位置改变时调用 */ public void onLocationChanged(Location location) {lblPosition.setText("Lat:"+String.format("%.4f", location.getLatitude()) + ",Lon:" + String.format("%.4f", location.getLongitude()));//刷新图层markLocation(location);} //Provider失效时调用public void onProviderDisabled(String arg0) {}//Provider生效时调用public void onProviderEnabled(String arg0) {}//状态改变时调用public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}};locMag.requestLocationUpdates(provider, 100, 0, locationListener);if(loc!=null){double latitude = loc.getLatitude();double longitude = loc.getLongitude();lblPosition.setText("Lat:"+String.format("%.4f", latitude) + ",Lon:" + String.format("%.4f", longitude));//开始画图markLocation(loc);}}
5、当位置不为空时,就在地图上画点
/** * 在地图上显示当前位置 * @param location */private void markLocation(Location location){gLayerPos.removeAll();double locx = location.getLongitude();double locy = location.getLatitude();wgspoint = new Point(locx, locy); mapPoint = (Point) GeometryEngine.project(wgspoint,SpatialReference.create(4326),mapview.getSpatialReference());//图层的创建Graphic graphicPoint = new Graphic(mapPoint,locationSymbol);gLayerPos.addGraphic(graphicPoint);/*划线if (startPoint == null) {poly=new Polyline();startPoint = mapPoint;poly.startPath((float) startPoint.getX(),(float) startPoint.getY());Graphic graphicLine = new Graphic(startPoint,new SimpleLineSymbol(Color.RED,2));gLayerGps.addGraphic(graphicLine);}*/poly.lineTo((float) mapPoint.getX(), (float) mapPoint.getY());gLayerGps.addGraphic(new Graphic(poly,new SimpleLineSymbol(Color.BLACK,2)));}
6、将gLayerPos显示
gLayerPos.setVisible(false);
这样,GPS的点就能在地图上显示了,并且能够显示所走的路径……
2 0
- Arcgis API for Android之GPS定位
- Arcgis For Android之GPS定位实现
- ArcGIS API for Android 定位服务
- ArcGIS for Android 之定位功能开发
- Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位
- ArcGis for Android定位
- [arcgis for android]arcgis for android 定位
- ArcGIS for Android Runtime100 基本操作(四)——GPS定位
- arcgis for android 定位 圆
- arcgis api for javascript 快速定位多边形
- arcgis api for javascript 快速定位多边形
- ArcGIS API for JavaScript实现坐标定位
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- Android之GPS定位详解
- github入门教程及日常使用操作命令
- (EM算法)The EM Algorithm
- php基础函数数组函数字符串函数
- Android中shape的使用
- 运维-----云计算的心脏
- Arcgis API for Android之GPS定位
- UITableview 给按钮添加事件和获得indexpath
- 硬盘里的照片丢失怎么办
- [Unity3D]uLua中类似Unity3D C# Messager的Event System
- Mysql my.ini配置文件详解
- jquery实现select选中行,列合计
- 共享内存在winodws操作系统下的使用
- redmine 自定义字段
- vc http 使用CHttpConnection下载文件