如何将百度地图API获取经纬度写成公有方法?
2013-01-16 11:31
501 查看
原问题来自于CSDN问答社区:http://ask.csdn.net/questions/636
问题描述:
我使用的是百度地图API来获取经纬度坐标。但是我的程序里面有多个地方用到了经纬度。
所以我就想把这个获取经纬度的方法写成公共方法,但是遇到了问题。首先是我修改了一点的百度获取经纬度坐标的代码!
MyLocition.activity
其中的getLocationByBaidu()就是我想要使用到的获取经纬度并计算两个点之间距离的方法了,但是其中 if (app.mBMapMan == null) 在其他地方调用的时候会报空指针错误。不知道是不是因为传递过来的Activity不对或者说这里的getlocation()没有获取到东西。
问题
1.是否是因为这个activity没有显示,所以 BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();没有能获取到东西。怎么解决这个问题呢?
2.是否有其他办法来解决获取经纬度坐标的问题,实在不行 我就只有在每个需要 用到经纬度的地方把上面的那个方法写到那个activity里面了(我试过那样可以),但是代码太冗余了,重复的很多。
解决方案:
我也没见你调用这个方法啊?是否为空,一个log就明白了
你不是有这么一句吗
if (location != null) {
就在这里调用,直接把这个location传过去不就行了吗,是不会空的
你所说的空,肯定是传的时候就是空的,可以调试看看
对于这个径纬度,要是我,我会分开,取得径纬度不做好,我不会进行下一步
你现只需将此两个变量值当成参数或是用结构体还是啥数据类型都一回事
关健是能把数据送过去,此处在不在activity里不重要,因为context可以传送
另外还有一种方法,如果操作过多,你可以建立一个Handler消息通道
在任何地方都可以通过这样来与之通信,特别你有多个类会很实用
问题描述:
我使用的是百度地图API来获取经纬度坐标。但是我的程序里面有多个地方用到了经纬度。
所以我就想把这个获取经纬度的方法写成公共方法,但是遇到了问题。首先是我修改了一点的百度获取经纬度坐标的代码!
MyLocition.activity
package Dagaishang.Android; import java.util.HashMap; import java.util.Map; import Dagaishang.Android.Utility.CmpDistance; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.widget.TextView; import android.location.Location; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.LocationListener; public class MyLocation extends Activity { // 自己的经纬度坐标 private Double myPointX, myPointY; // 计算的两个经纬度之间的距离 private Double Distance; LocationListener mLocationListener = null;// create时注册此listener,Destroy时需要Remove Map<String, Object> myMap = new HashMap<String, Object>(); CmpDistance comDis = new CmpDistance(); String FriendPx; String FriendPy; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mylocation); // getLocationByBaidu("0", "0",this); } // FriendPx,FriendPy为好友的经纬度坐标,返回值为计算后的两个坐标的点的距离 String getLocationByBaidu(String PointY, String PonitY,Activity tontext) { FriendPx = PointY; FriendPy = PonitY; BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication(); if (app.mBMapMan == null) { app.mBMapMan = new BMapManager(this.getApplication()); app.mBMapMan.init(app.mStrKey, new BMapApiDemoApp.MyGeneralListener()); } app.mBMapMan.start(); // 注册定位事件 mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { if (location != null) { myPointX = location.getLongitude(); myPointY = location.getLatitude(); Distance = comDis.GetLongDistance(myPointX, myPointY, Double.valueOf(FriendPx), Double.valueOf(FriendPy)); } } }; return String.valueOf(Distance); } @Override protected void onPause() { BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication(); // 移除listener app.mBMapMan.getLocationManager().removeUpdates(mLocationListener); app.mBMapMan.stop(); super.onPause(); } @Override protected void onResume() { BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication(); // 注册Listener app.mBMapMan.getLocationManager().requestLocationUpdates( mLocationListener); app.mBMapMan.start(); super.onResume(); } }
其中的getLocationByBaidu()就是我想要使用到的获取经纬度并计算两个点之间距离的方法了,但是其中 if (app.mBMapMan == null) 在其他地方调用的时候会报空指针错误。不知道是不是因为传递过来的Activity不对或者说这里的getlocation()没有获取到东西。
问题
1.是否是因为这个activity没有显示,所以 BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();没有能获取到东西。怎么解决这个问题呢?
2.是否有其他办法来解决获取经纬度坐标的问题,实在不行 我就只有在每个需要 用到经纬度的地方把上面的那个方法写到那个activity里面了(我试过那样可以),但是代码太冗余了,重复的很多。
解决方案:
我也没见你调用这个方法啊?是否为空,一个log就明白了
你不是有这么一句吗
if (location != null) {
就在这里调用,直接把这个location传过去不就行了吗,是不会空的
你所说的空,肯定是传的时候就是空的,可以调试看看
对于这个径纬度,要是我,我会分开,取得径纬度不做好,我不会进行下一步
你现只需将此两个变量值当成参数或是用结构体还是啥数据类型都一回事
Class VecLoc{ double latitude =0;//经度 double longitude =0;//纬度 float accuracy =0;//精度 double altitude =0;//海拔 float bearing =0;//方向 float speed =0;//速度 }
关健是能把数据送过去,此处在不在activity里不重要,因为context可以传送
另外还有一种方法,如果操作过多,你可以建立一个Handler消息通道
在任何地方都可以通过这样来与之通信,特别你有多个类会很实用
Bundle data = new Bundle(); String mTAG = "LocationMessage"; String str="{\"latitude\":123,\"longtitude\":321}"; data.putString(mTAG,str); Message msg = new Message(); msg.setData(data); mHandler.sendMessage(msg);
相关文章推荐
- 百度map api并未公开获取站点坐标经纬度的api接口,通过logger2js分析百度地图api源码,找出获取某条公交线各个站点经纬度的未公开方法。
- 如何使用百度地图API自动获取地址和经纬度
- 继上篇文章补全:如何使用百度地图api获取地区经纬度--【实际项目中】
- 【百度地图API】如何获取行政区域的边界?
- 【百度地图API】如何批量转换为百度经纬度
- Jsp中如何在<c:forEach >标签内获取items集合的长度方法
- IOS 使用presentViewController方法跳转的navigationController如何获取及视图层级关系
- 详解如何获取客户端使用WCF服务的用户数,通过WCF取在线用户数量的方法
- 【百度地图API】当地址解析失败时,如何调用search方法查找地址
- phpcms如何获取当前文章的地址或url,以及解决方法。
- 如何在Service层获取用户session中保存的用户信息的方法
- java调用百度地图API根据地理位置中文获取经纬度
- Android获取经纬度的方法
- 【百度地图API】如何用圆形搜索获取中心点周围100米内全部关键点?如天安门附近所有的餐厅、加油站、宾馆、大厦等
- 如何获取方法参数的泛型类型
- 关于Java的泛型在所声明的对象中如何获取class或者实例的方法的总结
- JQuery下focus()无法自动获取焦点的处理方法 jquery如何使文本框获得焦点
- 百度地图api 获取当前位置经纬度。自驾俩点间的路线。
- 使用PHP如何获取WSDL中定义的方法列表
- JS如何获取一个未知DIV高度的方法