`
shangjava
  • 浏览: 1192315 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Android地图和GPS功能的实现

 
阅读更多

地图和GPS会是比较常用的一个功能了,网上能找到相当多的示例,同时几个地图引擎的公司也有开放他们的地图SDK,可以加以利用。这次是重点研究了基于Rexsee实现地图路线控制这个功能,分享出来。同时把Rexsee写的GPS功能源码也全部贴出来,有点多。看不明白的自己去Rexsee的社区:

Rexsee在扩展中直接使用了高德的SDK,应该是合作关系吧。通过高德地图对象内的函数,可以很轻松的制作出类似谷歌地图这样的导航软件。在地图插件打开后,当数据没有在插件框体内加载完毕前关闭插件或按下回退键,极易造成程序崩溃。所以再打开插件的时候最好设置为不可回退取消。

Rexsee因为是基于Web的开发,所以可以将程序做成全机型自动适配,那么在调整窗口的位置的时候就需要在位置上编写一定的逻辑。当然,屏幕像素获取方式不同,值也不同。。并且,在平板上,有的没有通知栏,或者通知栏在下面,有的需要减去通知栏的高度,有的则不需要。这都是需要去判断的。

当然在测试的时候可以先不管这些,随便设置一个就好。
rexseeMapAbc.start('window-cancelable:false;window-moveable:false;border-width:10px;border-(2*rexseeScreen.getScreenDensityScale()))+';window-modeless:true;window-dim-amount:0;');

基本操作中还包含了中心点设置,定位,路况。路况目前打开后无法消除。。。不知道为什么。

高德地图中的数据操作,导航操作,兴趣点操作返回值都是已数组的形式(前提是EVAL过)出现的,也就是所在导航时有多条。由于导航需要提供2地的经纬度,所以请大家配合数据转换中的地名获得目的地信息的函数方法使用,当然最好是限制经纬度范围,否则必须要拼写详细,如XX省XX市XX地名。请求出来的则是数跳线路,请根据需要取其中的1条或生成选择菜单。
function getRoute()
{
rexseeMapAbc.hideRoute();
var places=eval('('+prompt('prompt','title=导航输入框;message=请输入起始地和目的地:;options=起始地:|目的地:;defaultValue=北京市北京西站|北京市北京南站;inputType=text|text;')+')');
var startPlace=places[0];
var endPlace=places[1];
var tempsp=eval('('+rexseeMapAbc.getAddressFromLocationName(startPlace,1)+')');
rexseeMapAbc.requestRoute('routeRequest01',splong,splat,eplong,eplat,role);
}
  
function onRouteReady(id){
// alert(rexseeMapAbc.getRequesedRoute(id));
var temps=rexseeMapAbc.getRequestedRoute(id);
//temps = temps.replace(/\r\n","");

// alert(temps);
rexseeMapAbc.showRoute(id,0)
}

兴趣点的控制和路线控制属于同一个,如果关闭兴趣点,那么地图上的导航线也会一起消失。高德地图如果配合GPS使用的话,需要按照国家标准偏移,请偏移后(对象有提供相应函数)再进行定位,否则会有偏差。

还要注意:提供经纬度作为参数时,请先转换为字符串,不然偏差很大。

最后是Rexsee写的原生GPS源码,搞原生的可以直接看这个

Java code
/* * Copyright (C) 2011 The Rexsee Open Source Project * * You may obtain a copy of the License at * * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * limitations under the License. */ package rexsee.location; import java.util.List; import rexsee.core.browser.JavascriptInterface; import rexsee.core.browser.RexseeBrowser; import rexsee.core.browser.ActivityResult.ActivityResultListener; mport android.os.Bundle; import android.provider.Settings; public class RexseeGps implements JavascriptInterface { private static final String INTERFACE_NAME = "Gps"; @Override public String getInterfaceName() { return mBrowser.application.resources.prefix + INTERFACE_NAME; } @Override public static final String EVENT_ONGPSLOCATIONCHANGED = "onGpsLocationChanged"; public static String address2Json(Address address) { if (address == null) return "{}"; String rtn = ""; rtn += "{"; rtn += "\"Premises\":\"" + address.getPremises() + "\""; //Type of the location. Cross, road or POI. //rtn += ",\"SubLocality\":\"" + address.getSubLocality() + "\"";Not support SDK3 rtn += ",\"Thoroughfare\":\"" + address.getThoroughfare() + "\""; rtn += "}"; return rtn; } public static String addresses2Json(List<Address> addresses) { String rtn = "["; for (int i = 0; i < addresses.size(); i++) { if (i != 0) rtn += ","; } private int minUpdateDuration = 60; public RexseeGps(final RexseeBrowser browser) { mContext = browser.getContext(); mBrowser = browser; browser.eventList.add(EVENT_ONGPSSETTINGSUCCESSED); public void run() { stop(); } }); mListener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (browser != null) { browser.eventList.run(EVENT_ONGPSLOCATIONCHANGED, new String[]{ } @Override public void onProviderDisabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } } }; } //JavaScript Interface public boolean isReady() { return (((LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE)).isProviderEnabled(LocationManager.GPS_PROVIDER)) ? true : false; } locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minUpdateDuration * 1000, minUpdateDistance, mListener); } else { mBrowser.exception(getInterfaceName(), "GPS is not available."); } } public void stop() { } public void setMinimumUpdateDuration(int seconds) { minUpdateDuration = seconds; } public void setMinimumUpdateDistance(int meter) { minUpdateDistance = meter; } } public String getLastKnownLocation() { if (!isReady()) return "{}"; try { Location location = ((LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE)).getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location == null) return ""; return rtn; } catch (Exception e) { mBrowser.exception(getInterfaceName(), e); return "{}"; } } public String getLastKnownGeo(int maxNumber) { if (!isReady()) return "[]"; try { Location location = ((LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE)).getLastKnownLocation(LocationManager.GPS_PROVIDER); (), location.getLongitude(), maxNumber); return addresses2Json(addresses); } catch (IOException e) { mBrowser.exception(getInterfaceName(), e); return "[]"; } } public float getDistanceBetween(String startLongitude, String startLatitude, String endLongitude, String endLatitude) { Location.distanceBetween(sLatitude, sLongitude, eLatitude, eLongitude, results); return results[0]; } }

0
0
分享到:
评论

相关推荐

    AndroidGPS和网络定位及集成天地图demo

    该jar包为本人开发中使用的demo,有GPS和网络定位,还有个界面是天地图定位的demo,也可以天地图打点。

    Android百度地图画运动轨迹和GPS定位

    这是我做软酷实训项目时的一个功能,是在地图上画出运动轨迹。运行软件时要记得打开GPS哦,还有在户外哦,

    android使用GPS获取当前地理位置

    第一:当使用GPS定位时,最好不要使用getLastKnownLocation方法获得当前位置对象Location,因为该对 象可以在onLocationChanged的参数中由系统给予(根据文档,getLastKnownLocation有2方面功能:1. 获取当前地理...

    基于Android的百度地图GPS定位

    可以判定手机是否开启GPS功能,然后实现全球定位,定位精度还是比较高的

    gps和基站两种方式实现远程地图定位

    断断续续搞了两个多月,终于实现了android手机通过短信拦截进行远程定位,支持android4.4哦,受控手机的服务可以开机自启动,防止进程和服务被杀死,哈哈,有点儿像个流氓软件,不过方便家里老人和小孩使用哦!...

    安卓源码包 Android GPS 开发 地图&导航&定位&指南等设计代码合集 (45个).zip

    安卓调用百度地图,实现定位和搜索功能.rar 完美!SlidingMenu jar包版demo!不用导包!兼容2.2.zip 指南针安卓端源码.rar 水平方向伸缩的path按钮菜单,非弧形.rar 百度地图定位,显示周围的人,类似于E代驾的首页...

    基于安卓的GPS移动定位及运行轨迹管理系统

    服务器功能实现,包括利用Hibernate实现对数据库操作,以 Spring进行管理,响应用户的请求客户端功能实现,主要包括 MAPABC地图显示,利用手机GPS模块实现定位,调用 MAPABC API实现导航,以Android系统照相功能...

    Android客户端的GPS定位系统源码.rar

    本人纯属小白,和小组组员共同学习,借鉴并且编写的基于安卓客户端运行的GPS定位系统,可以实现简单的GPS定位功能,可能会有过于复杂的地方,望广大大佬指教,随着android客户端的位置移动移动,实现在地图上定位...

    安卓GPS地图导航定位指南相关-ArcGisforAndroid读取天地图2.0.rar

    ArcGis for Android读取天地图2.0.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android开发组之地图定位实习报告.pptx

    Android SDK ADT 第一个android地图 Hello world 定位查询 eclipse 虚拟机 一方面 Part one 4 初识android开发 Android开发组之地图定位实习报告全文共11页,当前为第4页。 Android studio 搭建环境 Hello world ...

    基于 Android 实现模拟地图定位功能【100012418】

    手机定位方式目前有4种:基站定位,WIFI定位,GPS定位,AGPS定位。本工程利用手机自带的"模拟位置"功能实现运行时修改LocationManager结果。

    基于安卓的GPS移动定位及运行轨迹管理系统+毕业论文

    服务器功能实现,包括利用Hibernate实现对数据库操作,以 Spring进行管理,响应用户的请求客户端功能实现,主要包括 MAPABC地图显示,利用手机GPS模块实现定位,调用 MAPABC API实现导航,以Android系统照相功能...

    android自开发定位程序。能在地图上显示当前位置。

    android自开发定位程序。能在地图上显示当前位置。支持经纬度查询。可开启反向显示经纬度功能。这是app的源码。源码中可以开启后台发短信功能。可以开启基站定位功能和GPS定位...(仅供功能实现,切勿用于非法用途!)

    android百度地图定位新版

    android 百度地图定位基本功能。在这个过程,要特别注意一点,模拟器是没有办法定位,当你加入定位模块的时候,传出的参数都是空的。 定位的这个方法函数,是通过回调接口来实现,而且触发该事件的时候,需要经纬度...

    基于Android技术的北斗/GPS车载导航系统设计

    设计了一种基于Android技术的北斗/GPS双...该终端通过对北斗和GPS信号的实时采集,将处理后的信息结合百度电子地图在触摸屏上实时直观显示用户当前位置,导航应用程序实现了周边及路线查询、地图切换、一键回家等功能。

    Android + SQLite + 百度地图SDK 管理系统

    2. 百度地图SDK离线开发(因为涉及到数据保密,所以设备不能联网,所以地图的二次开发都是离线状态的,实现了地图上图元分级显示、GPS定位等功能; 3. 用户权限管理(用户的SQLite数据库是放在平板的本身内存中,而...

    安卓GPS地图导航定位指南相关-安卓的实现地图轨迹的回放.zip

    安卓的实现地图轨迹的回放.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android项目实战之百度地图地点签到功能

    前言:先写个简单的地点签到功能,如果日后有时间细写的话,会更加好好研究一下百度地图api,做更多逻辑判断。 这里主要是调用百度地图中的场景定位中的签到场景。通过官方文档进行api集成。通过GPS的定位功能,获取...

    Android入门到精通源代码.

    《Android从入门到精通》 第1章 初识Android 1.1 什么是Android 1.1.1 移动信息设备分类 1.1.2 Open Handset Alliance和 Android 1.2 Android简介 ...13.3 俄罗斯方块游戏功能实现 13.4 俄罗斯方块游戏演示

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

Global site tag (gtag.js) - Google Analytics