博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Arcgis API for Android之GPS定位
阅读量:4648 次
发布时间:2019-06-09

本文共 3075 字,大约阅读时间需要 10 分钟。

欢迎大家加入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));

3、定义LocationManager

LocationManager locMag;//要定位在地图中的位置,需要知道当前位置,而当前位置有Location对象决定,//但是,Location对象又需要LocationManager对象来创建。//创建LocationManager的唯一方法locMag = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);//获得Provider列表final List
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的点就能在地图上显示了,并且能够显示所走的路径……

转载于:https://www.cnblogs.com/lzugis/p/6539908.html

你可能感兴趣的文章
JavaScript 复杂判断的更优雅写法借鉴
查看>>
hdu 5186 zhx's submissions
查看>>
<mvc:annotation-driven/>浅析
查看>>
ArcEngine开发之自定义工具
查看>>
SQL视频总结
查看>>
P4878 道路修建-美国
查看>>
dp练习
查看>>
vim
查看>>
苹果电脑包管理
查看>>
maze_travel的隐私声明
查看>>
对正则表达式又重新学了一遍,笔记方便以后查阅
查看>>
NSArray和NSString的联合使用
查看>>
UIKit应用 - Swift 版本: 3.让UITableViewCell的背景色渐变
查看>>
Java反射
查看>>
building tool
查看>>
JS中for循环输出三角形
查看>>
字节对齐2
查看>>
kafka幂等producer
查看>>
与Win8之磁盘活动时间100%斗争心得
查看>>
Matrix: android 中的Matrix (android.graphics.Matrix) (转)
查看>>