作者:皇皇

移动GIS经常需要获取当前位置信息,实现定位操作。用SuperMap iMouble for Android如何去获取当前位置信息呢?下面以“获取当前位置并显示在地图上”为例子,给大家演示实现步骤。

一、 获取位置信息
        要想实现定位,首先要获取当前的坐标位置。Android中有GPS定位、WIFI定准、基站定位、AGPS定位4种方式,其中GPS定位和AGPS定位是常用。它们特点如下:
        GPS定位:定位慢,准确度高,受环境影响大
        Network(AGPS定位):定位快,准确度低,受环境影响小。
        现在把它们两结合起来实现又快又准的定位
1. 添加权限
        AndroidManifest.xml文件里需要添加的权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2. 确保设备GPS定位服务开启或者网络可用
        用代码检测到GPS定位服务未开启并且网络不可用时,提醒用户在设置里面开启GPS定位服务或者连通网络。

LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// GPS定位服务是否开启
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 网络是否可用
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

3. 获取当前位置

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//同时开启GPS定位和网络定位    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000*2,50,GPSLocationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000*2, 50,NETWORKLocationListener);
//监听位置信息的改变
private final LocationListener GPSLocationListener =new LocationListener()
{
//当坐标改变时触发此函数
public void onLocationChanged(Location location)
{     updateWithNewLocation(location); // 获得GPS服务后,移除network监听  if (location !=null) {  locationManager.removeUpdates(NETWORKLocationListener);
}
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider){}
//Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
public void onStatusChanged(String provider,int status,Bundle extras)
{locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000*2, 50,NETWORKLocationListener);
}
};

在NETWORKLocationListener监听里面,除了不用移除GPSLocationListener,其他代码一样。
        开始的时候我们同时开启了GPS定位和网络定位,GPS第一次定位反应慢就用网络定位,当GPS定位成功后移除网络定位。GPS定位断开又添加网络定位。

//监听到位置发生改变,对位置进行更新
private void updateWithNewLocation(Location location)
{
if(location !=null){//获得经纬度
Point2D point2d0=new Point2D();point2d0.setX(location.getLongitude());point2d0.setY(location.getLatitude());
}
}

二、 坐标转换
        用GPS获取到的坐标是地理坐标系WGS 1984下的Point2D点对象,但是很多情况地图的坐标系并不是这个,当坐标系不一致的时候,定位就会有偏差,所以需要进行投影转换。

CoordSysTranslator  coordSysTranslator=new CoordSysTranslator();
//获取地图坐标系
PrjCoordSys prjCoordSys = mapControl.getMap().getPrjCoordSys();
//坐标系转换
Point2Ds point2ds=new Point2Ds();
point2ds.add(point2d0);
Boolean isOk=CoordSysTranslator.forward(point2ds,prjCoordSys);
Point2D point2d=point2ds.getItem(0);

对于那些经过加密平移的地图,就不能用上述的投影转换,需要地图供应商提供加密偏移的算法把Point2D点对象进行加密偏移.

三、 地图显示位置
        根据项目需求显示位置信息,比如显示行驶路线

//把路途上定位的点构成线对象
Point2Ds point2ds=new Point2Ds();
point2ds.add(point2d);
point2ds.add(new Point2D(1.23456, 13456));
GeoLine geoline = new GeoLine();
geoline.addPart(point2ds);
//用红色线在地图显示行驶路线
GeoStyle geoStyle_L = new GeoStyle();
geoStyle_L.setLineColor(new Color(255,0,0));
geoStyle_L.setLineSymbolID(15);
geoStyle_L.setLineWidth(1.0);
geoline.setStyle(geoStyle_L);
mapControl.getMap().getTrackingLayer().add(geoline, "行驶路线");


                                                                                                结果图一


                                                                                                结果图二

SuperMap iMobile for Android定位实现相关推荐

  1. SuperMap iMobile for Android之行业导航

    作者 :dongyx 在我们工作生活中,经常会遇到怎么去哪.如何去最节约成本的问题,这就需要使用地图导航的功能了,那么如何使用SuperMap iMobile for Android制作导航APP呢? ...

  2. SuperMap iMobile for Android常见问题解答集锦(十三)

    作者:皇皇 问:SuperMap iMobile for Android中是否支持实时GPS定位,怎么实现? 答:可以支持:通过LocationManagePlugin管理插件类,开启GPS设备,并设 ...

  3. SuperMap iMobile for Android 地图开发(一)

    第一步:创建 Android Studio 项目 第一步:创建 Android Studio 项目 Android Studio 有两种创建项目的方法. 第一种是在 Android Studio起始页 ...

  4. SuperMap iMobile for Android常见问题解答集锦(十四)

    问:SuperMap iMobile for Android中导出shp数据时能否设置其字符集,怎么设置? 答:导出时可以设置shp的字符集,通过类DataConversion下的setConvert ...

  5. SuperMap iMobile for Android中三维AR的使用

    前言 ARCore是一种增强现实体验构建平台,它可以利用不同的API让手机能够感知其环境.理解现实世界与信息进行交互.ARCore使用三个主要功能将虚拟内容与通过手机摄像头看到的现实世界整合: 1) ...

  6. SuperMap iMobile 8Cfor Android/iOS ——专业级移动GIS开发平台

    SuperMap iMobile 8C是一款全新的移动GIS开发平台,具备专业.全面的移动GIS功能.支持基于Android和iOS操作系统的智能移动终端,可以快速开发在线和离线的移动GIS应用. 谁 ...

  7. SuperMap iMobile for Android许可介绍

    作者:dongyx 使用SuperMap iMobile产品需要SuperMap的授权,即获得许可.目前,针对不同的用户和不同的使用场景,SuperMap iMobile提供三种许可方式,分别为试用许 ...

  8. SuperMap iMobile for Android开发入门(iMobile 10i + AS 3.6)

    SuperMap iMobile开发入门(iMobile 10i + AS3.6) 超图防坑指南 文章概要 AS3.6安装.SuperMap iMobile 10i下载 HelloMap工程创建 He ...

  9. SuperMap iMobile for Android 地图添加POI兴趣点

    作者:程溯 简介 Demo按类型往地图里添加POI兴趣点,并添加兴趣点的名称(name)与详细信息(detail).地图上不同类型的POI兴趣点采用不同符号来表示. 示例数据 Data: mypoi. ...

最新文章

  1. Ubuntu14.04下使用apt-get命令傻瓜式安装ffmepg成功
  2. [mybatis]缓存_缓存有关的设置以及属性
  3. python官网中cloudword在哪_Py之wordcloud:python中非常有趣的词云图wordcloud简介、安装、使用方法...
  4. 解决苹果mac新建txt文档在Windows下不换行的方法
  5. Linux安装GIMP
  6. 网易云音乐NCM格式转化为mp3
  7. 兄弟连Linux ppt笔记
  8. 【分享】Adobe Flash Player各版本安装包官方直接下载地址
  9. oracle卸载干净步骤
  10. 小学数学研究性学习设计方案
  11. java+单子_Java单子模式
  12. python 实现excel单元格合并和导出
  13. 2018年第九届蓝桥杯C/C++A组省赛 题面部分题解
  14. 端口复用|端口重映射
  15. 【Book 133】Illuminate-Harness the Positive Power of negative Thinking
  16. EVE-ng模拟器 安装教程
  17. android pdfview,android pdfview运行报错,求大神过来解答。跪谢
  18. ASP VBScript 分页函数 by Stabx, 第三版
  19. c# php 时间戳,C#实现时间戳的简单方法
  20. 全国普降大雪,人民喜忧参半!

热门文章

  1. java计算机毕业设计基于springboo+vue的电脑城销售系统
  2. hadoop报错ERROR: Cannot set priority of namenode process
  3. 2021-2027全球与中国步入式冰箱冰柜市场深度研究分析报告
  4. MySQL 中文姓名 按照26字母顺序排序
  5. 腾讯tca认证值得考吗?对比阿里云ACA有何优劣?
  6. 计算机表演赛创造栗,第27届计算机表演赛——优秀作品(2)
  7. 细说setTimeout/setImmediate/process.nextTick的区别
  8. setTimeout和setImmediate以及process.nextTick的区别
  9. 如何在 VirtualBox 中安装 SteamOS
  10. CentOS7搭建GateOne,实现WebSSH