欢迎大家增加Arcgis API for Android的QQ交流群:337469080

先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的东西,所以就总结一下,给大家共享出来,因为本人水平有限,bug是在所难免,还望有更高的高人批评指正。废话不多说,直接进入主题。

要想在地图上定位并将定位结果实时显示出来,启发逻辑上非常easy:首先,接收并解析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的点就能在地图上显示了,而且可以显示所走的路径……

Arcgis API for Android之GPS定位的更多相关文章

  1. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  2. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

  3. 新建arcgis api for android 项目失败

    新建ArcGIS Project for Android项目失败解决方案 - skybot的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/daonidedie/a ...

  4. android 获取GPS定位

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  5. 【Android】GPS定位基本原理浅析

    位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...

  6. Android开发——GPS定位

    1.LocationManager LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题. 与LocationManager相关的两个知识点: 1.1 ...

  7. Arcgis For Android之GPS定位实现

    翻开曾经做的东西,看了看,非常多从逻辑上比較乱,对之做了改动,完毕后实现的效果为: MapActivity源码例如以下: package com.lzugis.map; import java.io. ...

  8. Android之GPS定位详解

    一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...

  9. ArcGIS API For Android Errors汇总

    API客户端异常错误的发生通常是由于不正确的方法参数,对象状态依赖,或网络条件. //*******推荐使用方法,按下Ctrl+F搜索错误代码,再查看与代码对应的解释.********// ArcGI ...

随机推荐

  1. C#。1 数据类型,常量变量,类型转换

    C#. 一.数据类型 1,字符串类型(string) .放入一串字符串,需要用""引起来. 列如: string a ="999"; 2,整型 (int).   ...

  2. JAVA--聊天界面面板

    package windows.beautify; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event ...

  3. Redhat修改本地yum源

    1.将Centos系统的ios文件传到服务器,比如传到/root目录下: 2.将ios文件挂载到本地,需要在本地建立一个文件夹,比如/yum; mkdir /yum mount -o loop /ro ...

  4. 读书笔记_Effective_C++_条款十七:以独立语句将new产生的对象置入智能指针

    int get_int(); void f(shared_ptr<int> a, int); //下面调用 f(new int(3), get_int());//如果是类而不是int就可以 ...

  5. Java系列--第七篇 基于Maven的Android开发实战项目

    本篇是基于<Android应用案例开发大全,吴亚峰等著>的项目开发实例源码,其中有些图片,我做了一些修改,用于个人学习,请勿用于商业. 1, 日程管理专家 mvn archetype:ge ...

  6. jQuery实现图片预加载提高页面加载速度和用户体验

    我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...

  7. 一步步教你css3手风琴效果的实现

    什么是手风琴效果? 首先我们先来看一段动画,如下图所示: 在上面动画中,我们不难发现,一排照片正常排列,当我鼠标移上(:hover)时,照片会变大显示并且把其它照片挤小.那么在鼠标来回移动的过程中,画 ...

  8. 《HTML5经典坦克大战》游戏(代码)

    前几天粗略地学了HTML5,然后就用它写了一个<经典坦克大战>游戏. 现在想分享一下我写的代码,写得不好请大家多多指教. 给大家推荐一个网站,这个网站是为大学生而做,为方便学习编程的同学而 ...

  9. PHP数据过滤

    1.php提交数据过滤的基本原则  1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了.其实在涉及到变量取值时,intval ...

  10. IIS自定义404错误页显示“系统找不到指定的文件”解决方法

    在IIS站点属性里面设置了自定义的404错误页面为一个文件之后,有时一直不生效,总是提示这样一句话:“系统找不到指定的文件”. 其实这种错误也只是在某些网站程序中出现,其实解决办法很简单.这是由于II ...