Android无网络状态下使用GPS定位到省市县的一种简单实现方式
来源:互联网 发布:nba骑士vs公牛数据 编辑:程序博客网 时间:2024/06/05 19:10
1、场景说明
先说一下使用场景,之前公司是做移动GIS的,有这么一条需求,在野外使用android设备,无SIM卡无WIFI的情况下,需要定位到当前的省市县。。。客户大于一切,没办法,搞吧。
2、实现思路
首先,看一下公司的数据支持,行政编码、省市县的名称、left、top、bottom、right的经纬度,也就是说给出了每个地区的矩形范围,总结一下就是这个样子的;
数据库的范围是经纬度,使用场景又在野外,所以就选择了GPS定位的方式,用获取到的经纬度在数据库里进行筛选,得出一个最小最适合的范围——县,然后用县的行政编码往上查依次获取到对应的市和省;下面是代码片段。
//这里GpsInfo.getInstance()里注册了广播接收器,用于获取经纬度;double log = GpsInfo.getInstance(mContext).getLog();longitude = new DecimalFormat("0.000000").format(log);double lat = GpsInfo.getInstance(mContext).getLat();latitude = new DecimalFormat("0.000000").format(lat);//Gpsinfo类里log、lat默认-1,以此判断是否接收到GPSif (!longitude.equals("-1.000000") && !latitude.equals("-1.000000")) { //查询方式,下面会拆分一下 String findScope="select * from 'GB2008县市表' where MinX < '" + longitude+ "' and MaxX > '" + longitude + "' and MinY < '" + latitude + "' and MaxY > '" + latitude+ "'"; String sql ="select * from ("+findScope+") where ABS(MinX-'" + longitude + "')= (select min(ABS(MinX-'" + longitude+ "')) from ("+findScope+"))"; //获取到县的记录 List<LinkedHashMap<String,String>> query =cityHelper.query(sql); if (query!=null && query.size() > 0) { //查询到的县的名称 et_bt_area.setText(query.get(0).get("名称")); //县行政编码 String code=query.get(0).get("行政区划代码2008"); //县编码截取前两位再补上0000即为对应的省编码 String privacecode = code.substring(0, 2) + "0000"; //县编码截取前四位再补上00即为对应市编码 String citycode = code.substring(0, 4) + "00"; //根据编码查到对应的省、市名称 List<LinkedHashMap<String, String>> privincequery = cityHelper.query(null, "where 行政区划代码2008='" + privacecode+ "'", null); List<LinkedHashMap<String, String>> cityquery = cityHelper.query(null, "where 行政区划代码2008='" + citycode + "'",null); et_bt_city.setText(cityquery.get(0).get("名称")); et_bt_province.setText(privincequery.get(0).get("名称")); }else { //GPS信号差 }
思路很简单,主要说一下定位县的sql语句:
//获取到经纬度所在矩形范围内的所有记录String findScope="select * from 'GB2008县市表' where MinX < '" + longitude+ "' and MaxX > '" + longitude + "' and MinY < '" + latitude + "' and MaxY > '" + latitude+ "'";//根据经度距离最小找到县的范围,出于效率考虑,只考虑经度(X方向)String sql ="select * from ("+findScope+") where ABS(MinX-'" + longitude + "')= (select min(ABS(MinX-'" + longitude+ "')) from ("+findScope+"))";
因为数据和数学水平有限,只能根据范围定位,误差肯定是有的,但用户使用过几个月反馈来看,只在县界边的地方会判断不准,后面与底层开发同事配合,使用图层文件用轮廓判断,这样就能保证了在边界处也能准确的定位到县;
据我了解还有一些实现方式,比如IOS的通过记录wifi位置,离线状态只要检测到wifi就能查到对应的位置,这种就很厉害了。
阅读全文
0 0
- Android无网络状态下使用GPS定位到省市县的一种简单实现方式
- Android入门:使用Android GPS实现简单的定位
- android中关于gps定位的实现方式
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android GPS 定位的实现
- Android 定位GPS的使用
- 如何让你的魅蓝手机无网络下GPS神速搜星定位!
- Android-GPS,网络定位
- Android下实现GPS定位服务
- android定位之GPS,WIFI和GPRS(NETWORK)方式的定位(含实现源码)
- 实现的第一种 用gps 定位的 代码
- Android之手机定位方式(GPS定位,网络定位,基站定位)
- Android GPS定位实现
- Android GPS 定位的实现(1)
- 教程:实现Android的不同精度的定位(基于网络和GPS)
- Intellij idea 非Maven项目导出War包
- POJ2528-Mayor's posters(线段树+离散化)
- EditText金额输入(限制输入金额大小和小数点后两位)
- ROS中使用URDF
- shiro框架总结二
- Android无网络状态下使用GPS定位到省市县的一种简单实现方式
- HDU_2011多项式求和
- 二叉树统计单词个数
- 90后维密超模放弃500万美元年薪去当程序媛,实力演绎超模的开挂人生~
- Facebook 最热门的开源项目推荐!
- 一图看懂,安卓开发编程语言之间的对决:Kotlin Vs Java
- 添加了点击事件之后原本的hover属性就不运行了
- 体绘制
- Android Studio错误:需要class, interface或enum