• Arcgis API for Android之GPS定位


    欢迎大家加入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<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的点就能在地图上显示了,并且能够显示所走的路径……

  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539908.html
Copyright © 2020-2023  润新知