android 百度地图怎么将获取到的地址花样字体转换器 可复制为坐标

博客分类:
百度地图API中,有GPS坐标转百度坐标的功能
/wiki/static/map/API/examples/?v=1.2&0_6#0&6
http接口是:http://api./ag/coord/convert?from=0&to=4&x=116.397428&y=39.90923&callback=BMap.Convertor.cbk_7594
返回结果坐标是通过base64加密的。
这个转换算法百度是不会公开的,而且百度也没有提供百度坐标转成GPS坐标功能,这里我用了取巧的办法。
百度坐标和GPS坐标转换在很近的距离时偏差非常接近。
假设你有百度坐标:x1=116.397428,y1=39.90923
把这个坐标当成GPS坐标,通过接口获得他的百度坐标:x2=116.,y2=39.
通过计算就可以得到GPS的坐标:
x = 2*x1-x2,y = 2*y1-y2
x=116.01
y=39.
在/wiki/static/map/API/examples/?v=1.2&0_6#0&6 将此坐标输入GPS数据项中得到的结果是:116.,39.
浏览 90041
浏览: 178513 次
来自: 长沙
jquery全局ajax参数详细执行分析-$.ajax竟然可以 ...
原来的点传不到回调函数里,回调函数里获得的值在外面又取不到,请 ...
GPS坐标转百度坐标的功能 ,百度有这个api是吧,可是我调用 ...
我把配置中的所有地址用IP代替,终于解决了
你好!我服务器运行hbase后,页面访问http://192. ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'用户名:qllinhongyu
文章数:29
访问量:136216
注册日期:
阅读量:1297
阅读量:3317
阅读量:583713
阅读量:468884
51CTO推荐博文
& &在上一篇博文()中介绍了如何用HTML5获取当前用户的地理坐标信息。得到了这么重要的数据,我们就可以通过调用地图接口,实现很多耪ㄌ斓墓δ堋 & &先给大家看个我通过HTML5获取到自己的坐标信息后,再调用百度地图接口定位的截图: & &哎哟我去,第一张图不对啊,这地图上显示的地理位置与我实际的地理位置不符呀!偏离的好远!是百度地图定位不准确吗?其实根本不是百度地图的问题,而是你提供的地理坐标不对!坐标怎么会不对呢?客官别急,让我慢慢道来: & &首先,我这个Demo背景是用HTML5 Geolocation特性通过GPS设备“爱疯”获取来的地理坐标信息(GPS设备获取的坐标),根据相关法律的规定,GPS获取的原始坐标又不能在互联网上对外提供。 & &其次,不同的API提供商可能会使用不同的坐标系,例如google地图、百度地图、soso地图……他们的坐标系都有所差异。 & &简单的说,就是我现在GPS设备获取的坐标,如果要在百度地图中精确定位的话,那就得把GPS原坐标转换为百度地图的坐标系。同理,如果调用的是别家地图API,你也得把坐标转换为他们的体系。 & &那到底该怎么转换坐标呢?放心,API提供商早就为大家准备好了接口。本文就以百度地图为例: & &百度地图官方文档:文档已经写了很清楚,我就不细说了,结合下本文的Demo给大家讲讲我的做法。 & &(1)首先你要成为百度开发者,要获取百度给你的密钥,这样你才可以调用百度的API; & &(2)按照请求参数说明拼写发送http请求的url;发送的请求格式是:服务参数的详情:参数含义取值范围是否必须默认取值coords源坐标格式:经度,纬度;经度,纬度…限制:最多支持100个格式举例:114.,29.;114.,29.是无ak开发者密钥是无sn用户的权限签名否若用户所用ak的校验方式为sn校验时该参数必须。()from源坐标类型取值为如下:1:GPS设备获取的角度坐标;2:GPS获取的米制坐标、sogou地图所用坐标;3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标4:3中列表地图坐标对应的米制坐标5:百度地图采用的经纬度坐标6:百度地图采用的米制坐标7:mapbar地图坐标;8:51地图坐标否默认为1,即GPS设备获取的坐标to目的坐标类型有两种可供选择:5、6。5:bd09ll(百度经纬度坐标),6:bd09mc(百度米制经纬度坐标);否默认为5,即bd09ll(百度坐标)output返回结果格式json或者xml否json & &(3)接收返回的数据(json或者xml格式),这个返回的格式就是依据之前你发送的url请求中output这个参数来定的,默认返回的是json格式。返回值说明:名称类型含义取值范围statusinit状态码正常0,异常非0,详细见状态码说明resultjson或者xml数组转换结果与输入顺序一致xfloat横坐标yfloat纵坐标例如你发送的url为:则返回的json格式:{
status : 0,
} & & & &废话说了一大堆,还是赶紧上Demo源码:function initdata(){ //页面初始化
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);//HTML5获取GPS设备地理位置信息
document.getElementById("allmap").innerHTML="Geolocation is not supported by this browser.";
function showPosition(position){
var x=position.coords.//获取纬度
var y=position.coords.//获取经度
//转为百度地图坐标
//注意点:1、coords的经度、纬度顺序(可多组坐标转换,以;(分号)隔开)。2、from与to的准确性。3、callback为回调函数
var positionUrl = "http://api./geoconv/v1/?coords="+y+","+x+"&from=1&to=5&ak=你的密钥&callback=getMap";
var script = document.createElement('script');
script.src = positionU
document.getElementsByTagName("head")[0].appendChild(script);
function getMap(data){
//返回的状态码,0为正常;1为内部错误;21为from非法;22为to非法;24为coords格式非法;25为coords个数非法,超过限制
if(data.status!=0){
alert("地图坐标转换出错");
//result为数组
var result = data.
var lon = result[0].x;//经度
var lat = result[0].y;//纬度
// 百度地图API功能
var map = new BMap.Map("allmap");
// 创建Map实例
var point = new BMap.Point(lon,lat);
map.centerAndZoom(point, 14);
map.addControl(new BMap.ZoomControl());
//添加地图缩放控件
var marker1 = new BMap.Marker(point);
// 创建标注
map.addOverlay(marker1);
// 将标注添加到地图中
//创建信息窗口
var infoWindow1 = Window("您当前所处的位置,经度:"+lon+";纬度:"+lat);
marker1.addEventListener("click", function(){this.openInfoWindow(infoWindow1);});
//HTML5获取地理位置信息错误处理
function showError(error)
switch(error.code)
case error.PERMISSION_DENIED:
document.getElementById("allmap").innerHTML="User denied the request for Geolocation."
case error.POSITION_UNAVAILABLE:
document.getElementById("allmap").innerHTML="Location information is unavailable."
case error.TIMEOUT:
document.getElementById("allmap").innerHTML="The request to get user location timed out."
case error.UNKNOWN_ERROR:
document.getElementById("allmap").innerHTML="An unknown error occurred."
} & & & &不搭嘎的结语:嗯,虽然还很菜,但一直在努力,坚持博客分享。文章中若有不足或不正确之处,还望大家指正。 & &本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:Android&通过百度地图SDK&实现地图显示和定位(一)
通过百度地图SDK
实现地图显示和定位(一)。
访问百度地图API
网站,查看流程。
/index.php?title=androidsdk
<img WIDTH="554" HEIGHT="179" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static13..cn/middle/005PqgRAzy76q1U3OEs5c&690" V:SHAPES="图片_x0020_3"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
获取密匙(AK)
要使用百度地图的sdk
首先先申请自己的应用的密匙(Ak)
<img WIDTH="554" HEIGHT="209" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static4..cn/middle/005PqgRAzy76q1U5IXxd3&690" V:SHAPES="图片_x0020_4"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
<img WIDTH="554" HEIGHT="223" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1U6O8d75&690" V:SHAPES="图片_x0020_5"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
填写相关的信息。
SHA1的获取(两种方法)
解释:SHA1安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。
&&&&&&&&&&&&&&&&&&&&
获取方法(两种)
通过打包签名的方式进行获取
【1】右键项目-&report(输出)
<img WIDTH="456" HEIGHT="281" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static9..cn/middle/005PqgRAzy76q1U87Wwe8&690" V:SHAPES="图片_x0020_6"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
<img WIDTH="554" HEIGHT="223" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static3..cn/middle/005PqgRAzy76q1U7LIS42&690" V:SHAPES="图片_x0020_9"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
<img WIDTH="554" HEIGHT="213" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1Ub7d7d1&690" V:SHAPES="图片_x0020_10"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
注意这个 project
不能是中文
<img WIDTH="554" HEIGHT="320" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1Uco" V:SHAPES="图片_x0020_11"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
你可以创建新的存放签名的路径,获取选择原来创建过的路径。(上图是使用已经创建过的路径)
************************************
先演示创建新的路径方式
<img WIDTH="554" HEIGHT="287" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static6..cn/middle/005PqgRAzy76q1UbKCNa5&690" V:SHAPES="图片_x0020_12"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
自己设定存放的路径,记得起个名
<img WIDTH="554" HEIGHT="394" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1Ufg" V:SHAPES="图片_x0020_13"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
填写你自己的信息
写好的你的密码,其它参数参照网上看下。
下来点 Finish
注意这个只是
创建一个路径,没有将应用打包签名
使用旧路径来实现应用的打包签名
<img WIDTH="554" HEIGHT="348" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1UeAYFb1&690" V:SHAPES="图片_x0020_14"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
<img WIDTH="554" HEIGHT="240" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static16..cn/middle/005PqgRAzy76q1UhAnl8f&690" V:SHAPES="图片_x0020_15"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
重要的时候来了
<img WIDTH="554" HEIGHT="284" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1UgTe7a7&690" V:SHAPES="图片_x0020_16"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
两种加密方式
所以我们就拿到了SHA1
的值。点击Finish
就打包签名成功。
00:1A:65:CC:EC:EE:A4:84:C6:AA:6F:C4:4D:AD:76:A1:25:2F:73:03
<img BORDER="0" WIDTH="431" HEIGHT="330" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static7..cn/middle/005PqgRAzy76q1UjegS96&690" V:SHAPES="_x"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
使用 adt 22
以上版本,可以在 eclipse
中直接查看SHA1。
Windows:依次在
中打开 Window -& Preferances -&
Android -& Build。
<img BORDER="0" WIDTH="421" HEIGHT="336" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1UkCQ575&690" V:SHAPES="图片_x0020_20"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
<img BORDER="0" WIDTH="554" HEIGHT="336" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static14..cn/middle/005PqgRAzy76q1UlFoNdd&690" V:SHAPES="图片_x0020_21"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
Mac:依次在
中打开 Eclipse/ADT-&Preferances -&
Android -& Build。
在弹出的 Build
对话框中&SHA1
fingerprint&
中的值即为 Android
签名证书的 Sha1
值,如下图所示:
fingerprint
E8:92:24:5E:1A:0B:61:25:45:D4:09:A2:23:54:89:A2:36:44:7D:13
这个应该是debug
未经测试,还不知道
申请创建应用
将我们拿到的SHA1
的值和我们项目的包名提交。
<img BORDER="0" WIDTH="554" HEIGHT="189" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1Up3T076&690" V:SHAPES="图片_x0020_22"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
/sdk/download?selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
<img BORDER="0" WIDTH="553" HEIGHT="253" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static9..cn/middle/005PqgRAzy76q1UorvG38&690" V:SHAPES="图片_x0020_23"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
<img BORDER="0" WIDTH="553" HEIGHT="268" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static3..cn/middle/005PqgRAzy76q1UpGmu32&690" V:SHAPES="图片_x0020_24"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
我们将我们需要的服务都选中
下载开发包&
创建项目,加载jar包
查看官方的开发指南
/index.php?title=androidsdk/guide/buildproject
Eclipse工程配置方法
第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下(官网demo里已有这两个文件,如果要集成到自己的工程里,就需要自己添加),拷贝完成后的工程目录如下图所示;
<img BORDER="0" WIDTH="248" HEIGHT="98" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static2..cn/middle/005PqgRAzy76q1Ur8Ixf1&690" ALT="1.JPG" V:SHAPES="图片_x0020_25"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
第二步:在工程属性-&Java
Build Path-&Libraries中选择&Add External JARs&,选定baidumapapi_vX_X_X.jar,确定后返回。
通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。
注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:
在Eclipse 中选中工程,右键选
Properties-&Java
Build Path-&Order and Export 使 Android Private
Libraries处于勾选状态;
2. Project -&
clean-& clean all .
显示百度地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
&application&&
&&&&&meta-data&
&&&&&&&&android:name="com.baidu.lbsapi.API_KEY"&
&&&&&&&&android:value="开发者 key" /&&
&/application&
2)添加所需权限
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&uses-permission android:name="android.permission.INTERNET"/&
&uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /&
&uses-permission android:name="android.permission.WAKE_LOCK"/&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&
&uses-permission android:name="android.permission.WRITE_SETTINGS" /&
第三步,在布局xml文件中添加地图控件;
&com.baidu.mapapi.map.MapView&
&&&&android:id="@+id/bmapView"&
&&&&android:layout_width="fill_parent"&
&&&&android:layout_height="fill_parent"&
&&&&android:clickable="true" /&
第四步,在应用程序创建时初始化SDK引用的Context 全局变量:
public class MainActivity extends Activity {&
&&&&@Override&
&&&&protected void onCreate(Bundle savedInstanceState) {&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {&
&&&&MapView mMapView = null;&
&&&&@Override&
&&&&protected void onCreate(Bundle savedInstanceState) {&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
&&&&&&&&//获取地图控件引用&
&&&&&&&&mMapView = (MapView) findViewById(R.id.bmapView);&
&&&&@Override&
&&&&protected void onDestroy() {&
&&&&&&&&super.onDestroy();&
&&&&&&&&//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理&
&&&&&&&&mMapView.onDestroy();&
&&&&@Override&
&&&&protected void onResume() {&
&&&&&&&&super.onResume();&
&&&&&&&&//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理&
&&&&&&&&mMapView.onResume();&
&&&&&&&&}&
&&&&@Override&
&&&&protected void onPause() {&
&&&&&&&&super.onPause();&
&&&&&&&&//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理&
&&&&&&&&mMapView.onPause();&
&&&&&&&&}&
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
<img BORDER="0" WIDTH="346" HEIGHT="512" src="/blog7style/images/common/sg_trans.gif" real_src ="http://static8..cn/middle/005PqgRAzy76q1UvR0Xf7&690" ALT="android_dev2.jpg" V:SHAPES="图片_x0020_26"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。
注意:你的jar
包需要下都是一个版本的,版本不一样就会出现很多的问题。
***********************************************************明天重新写一个Demo
看看到底怎么写
BaiduMapDemo
2016年11月1日17:19:48
【1】实现百度地图的显示
【2】实现定位功能
实现百度地图的显示
准备下载基础的jar包,并且加载到类库中去。
显示百度地图
百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:
第一步:创建并配置工程(具体方法参见工程配置部分的介绍);
第二步:在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥
&application&&
&&&&&meta-data&
&&&&&&&&android:name="com.baidu.lbsapi.API_KEY"&
&&&&&&&&android:value="开发者 key" /&&
&/application&
2)添加所需权限
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&uses-permission android:name="android.permission.INTERNET"/&
&uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /&
&uses-permission android:name="android.permission.WAKE_LOCK"/&
&uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&
&uses-permission android:name="android.permission.WRITE_SETTINGS" /&
第三步,在布局xml文件中添加地图控件;
&com.baidu.mapapi.map.MapView&
&&&&android:id="@+id/bmapView"&
&&&&android:layout_width="fill_parent"&
&&&&android:layout_height="fill_parent"&
&&&&android:clickable="true" /&
第四步,在应用程序创建时初始化SDK引用的Context 全局变量:
public class MainActivity extends Activity {&
&&&&@Override&
&&&&protected void onCreate(Bundle savedInstanceState) {&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
第五步,创建地图Activity,管理地图生命周期;
public class MainActivity extends Activity {&
&&&&MapView mMapView = null;&
&&&&@Override&
&&&&protected void onCreate(Bundle savedInstanceState) {&
&&&&&&&&super.onCreate(savedInstanceState);&&
&&&&&&&&//在使用SDK各组件之前初始化context信息,传入ApplicationContext&
&&&&&&&&//注意该方法要再setContentView方法之前实现&
&&&&&&&&SDKInitializer.initialize(getApplicationContext());&
&&&&&&&&setContentView(R.layout.activity_main);&
&&&&&&&&//获取地图控件引用&
&&&&&&&&mMapView = (MapView) findViewById(R.id.bmapView);&
&&&&@Override&
&&&&protected void onDestroy() {&
&&&&&&&&super.onDestroy();&
&&&&&&&&//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理&
&&&&&&&&mMapView.onDestroy();&
&&&&@Override&
&&&&protected void onResume() {&
&&&&&&&&super.onResume();&
&&&&&&&&//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理&
&&&&&&&&mMapView.onResume();&
&&&&&&&&}&
&&&&@Override&
&&&&protected void onPause() {&
&&&&&&&&super.onPause();&
&&&&&&&&//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理&
&&&&&&&&mMapView.onPause();&
&&&&&&&&}&
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
<img BORDER="0" WIDTH="32" HEIGHT="32" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1UAXE965&690" ALT="android_dev2.jpg" V:SHAPES="_x"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。
出现的错误
<img BORDER="0" WIDTH="576" HEIGHT="324" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/005PqgRAzy76q1UCT59cb&690" V:SHAPES="图片_x0020_1"
ALT="Android&通过百度地图SDK&实现地图显示和定位(一)"
TITLE="Android&通过百度地图SDK&实现地图显示和定位(一)" />
Authentication Error errorcode: 200 uid: -1 appid
-1 msg: APP不存在
解决方法:将你创建的应用删掉,再创建一个,重新获取AK
定位功能与
功能类的使用
使用综合定位功能
综合定位功能指的是根据用户实际需求,返回用户当前位置的基础定位服务,包含GPS和网络定位(WiFi定位和基站定位)功能。基本定位功能同时还支持位置描述信息功能,离线定位功能,位置提醒功能和位置语义化功能。
第一步,初始化LocationClient类
此处需要注意:LocationClient类必须在主线程中声明,需要Context类型的参数。
Context需要时全进程有效的Context,推荐用getApplicationConext获取全进程有效的Context。
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
&&& mLocationClient = new LocationClient(getApplicationContext());&&&& //声明LocationClient类
&&& mLocationClient.registerLocationListener( myListener );&&& //注册监听函数
LocationClient类是定位SDK的核心类,具体方法详见。
第二步,配置定位SDK参数
设置定位参数包括:定位模式(高精度定位模式、低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、位置语义化信息、POI信息等等。
LocationClientOption类,该类用来设置定位SDK的定位方式,例如:
private void initLocation(){
&&&&&&& LocationClientOption option = new LocationClientOption();
&&&&&&& option.setLocationMode(LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
&&&&&&& option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
&&&&&&& int span=1000;
&&&&&&& option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
&&&&&&& option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
&&&&&&& option.setOpenGps(true);//可选,默认false,设置是否使用gps
&&&&&&& option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
&&&&&&& option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于&在北京天安门附近&
&&&&&&& option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死&
&&&&&&&&option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
&&&&&&& mLocationClient.setLocOption(option);
高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;
低功耗定位模式:这种定位模式下,不会使用GPS进行定位,只会使用网络定位(WiFi定位和基站定位);
仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位。
第三步,实现BDLocationListener接口
BDLocationListener为结果监听接口,异步获取定位结果,实现方式如下:
public class MyLocationListener implements BDLocationListener {
&&&&&&& @Override
&&&&&&& public void onReceiveLocation(BDLocation location) {
&&&&&&&&&&& //Receive Location
&&&&&&&&&&& StringBuffer sb = new StringBuffer(256);
&&&&&&&&&&& sb.append("time&: ");
&&&&&&&&&&& sb.append(location.getTime());
&&&&&&&&&&& sb.append("\nerror code&: ");
&&&&&&&&&&& sb.append(location.getLocType());
&&&&&&&&&&& sb.append("\nlatitude&: ");
&&&&&&&&&&& sb.append(location.getLatitude());
&&&&&&&&&&& sb.append("\nlontitude&: ");
&&&&&&&&&&& sb.append(location.getLongitude());
&&&&&&&&&&& sb.append("\nradius&: ");
&&&&&&&&&&& sb.append(location.getRadius());
&&&&&&&&&&& if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果
&&&&&&&&&&&&&&& sb.append("\nspeed&: ");
&&&&&&&&&&&&&&& sb.append(location.getSpeed());// 单位:公里每小时
&&&&&&&&&&&&&&& sb.append("\nsatellite&: ");
&&&&&&&&&&&&&&& sb.append(location.getSatelliteNumber());
&&&&&&&&&&&&&&& sb.append("\nheight&: ");
&&&&&&&&&&&&&&& sb.append(location.getAltitude());// 单位:米
&&&&&&&&&&&&&&& sb.append("\ndirection&: ");
&&&&&&&&&&&&&&& sb.append(location.getDirection());// 单位度
&&&&&&&&&&&&&&& sb.append("\naddr&: ");
&&&&&&&&&&&&&&& sb.append(location.getAddrStr());
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("gps定位成功");
&&&&&&&&&&& } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果
&&&&&&&&&&&&&&& sb.append("\naddr&: ");
&&&&&&&&&&&&&&& sb.append(location.getAddrStr());
&&&&&&&&&&&&&&& //运营商信息
&&&&&&&&&&&&&&& sb.append("\noperationers&: ");
&&&&&&&&&&&&&&& sb.append(location.getOperators());
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("网络定位成功");
&&&&&&&&&&& } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("离线定位成功,离线定位结果也是有效的");
&&&&&&&&&&& } else if (location.getLocType() == BDLocation.TypeServerError) {
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-,会有人追查原因");
&&&&&&&&&&& } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("网络不同导致定位失败,请检查网络是否通畅");
&&&&&&&&&&& } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
&&&&&&&&&&&&&&& sb.append("\ndescribe&: ");
&&&&&&&&&&&&&&& sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
&&&&&&&&&&& }
sb.append("\nlocationdescribe&: ");
&&&&&&&&&&&&&&& sb.append(location.getLocationDescribe());// 位置语义化信息
&&&&&&&&&&&&&&& List&Poi& list = location.getPoiList();// POI数据
&&&&&&&&&&&&&&& if (list != null) {
&&&&&&&&&&&&&&&&&&& sb.append("\npoilist size =&: ");
&&& &&&&&&&&&&&&&&&&sb.append(list.size());
&&&&&&&&&&&&&&&&&&& for (Poi p : list) {
&&&&&&&&&&&&&&&&&&&&&&& sb.append("\npoi=&: ");
&&&&&&&&&&&&&&&&&&&&&&& sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&&Log.i("BaiduLocationApiDem", sb.toString());
BDLocation类,封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取。通过该类用户可以获取错误码,位置的坐标,精度半径等信息。具体方法请参考。
获取定位返回错误码::
public int getLocType ( )
: GPS定位结果,GPS定位成功。
: 无法获取有效定位依据,定位失败,请检查运营商网络或者WiFi网络是否正常开启,尝试重新请求定位。
: 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。
: 定位缓存的结果。
: 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。
: 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。
: 网络连接失败时,查找本地离线定位时对应的返回结果。
网络定位结果,网络定位成功。
请求串密文解析失败,一般是由于客户端SO文件加载失败造成,请严格参照开发指南或demo开发,放入对应SO文件。
服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。
AK参数错误,请按照说明文档重新申请AK。
505:AK不存在或者非法,请按照说明文档重新申请AK。
AK服务被开发者自己禁用,请按照说明文档重新申请AK。
mcode不匹配,您的AK配置过程中安全码设置有问题,请确保:SHA1正确,&;&分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请AK。
501~700:AK验证失败,请按照说明文档重新申请AK。
如果不能定位,请记住这个返回值,并到百度LBS开放平台论坛Andriod定位SDK版块中进行交流,网址:&。若返回值是162~167,请将错误码、IMEI和定位时间反馈至邮箱loc-,以便我们跟进追查问题。
第四步,开始定位
mLocationClient.start();
start:启动定位SDK。 stop:关闭定位SDK。调用start之后只需要等待定位结果自动回调即可。
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop函数即可。
如果stop之后仍然想进行定位,可以再次start等待定位结果回调即可。
如果开发者想按照自己逻辑请求定位,可以在start之后按照自己的逻辑请求locationclient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。
位置提醒使用
位置提醒最多提醒3次,3次过后将不再提醒。
假如需要再次提醒,或者要修改提醒点坐标,都可通过函数SetNotifyLocation()来实现。
//位置提醒相关代码
mNotifyer = new NotifyLister();
mNotifyer.SetNotifyLocation(42.37,113.6,3000,"gps");//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
mLocationClient.registerNotify(mNotifyer);
//注册位置提醒监听事件后,可以通过SetNotifyLocation 来修改位置提醒设置,修改后立刻生效。
//BDNotifyListner实现
public class NotifyLister extends BDNotifyListener{
&&&&&& public void onNotify(BDLocation mlocation, float distance){
&&&&&& &&&mVibrator01.vibrate(1000);//振动提醒已到设定位置附近
//取消位置提醒
mLocationClient.removeNotifyEvent(mNotifyer);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 花样字体转换器 可复制 的文章

 

随机推荐