百度地图定位及移动到中心点的问题

沸腾 2012-12-21 03:36:30
我的代码:

public class Main extends MapActivity {

// 地图引擎管理
private BMapManager mBMapManager;

// MapView控制
private MapController mMapController;

// MapView
private MapView mMapView;

// 地图覆盖物
private MyLocationOverlay mLocationOverlay;

// 当前经纬度
private GeoPoint myPoint;

// 定位监听
private LocationListener mLocationListener;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mBMapManager = new BMapManager(getApplication());
mBMapManager.init("65E876940AFB41F7DC232FFB11DBCECEC948591B", null);
super.initMapActivity(mBMapManager);

mMapView = (MapView)findViewById(R.id.bmapsView);

// 设置启用内置的缩放控件
mMapView.setBuiltInZoomControls(true);

// 设定缩放时重新绘制覆盖物
mMapView.setDrawOverlayWhenZooming(true);

// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
mMapController = mMapView.getController();

//设置地图zoom级别
mMapController.setZoom(15);

// 添加定位图层
mLocationOverlay = new MyLocationOverlay(this, mMapView);
// 添加定位覆盖物
mMapView.getOverlays().add(mLocationOverlay);

Drawable marker = getResources().getDrawable(R.drawable.shop);
mMapView.getOverlays().add(new ShopOverLay(marker, Main.this));

// 注册定位监听
mLocationListener = new LocationListener() {

public void onLocationChanged(Location mLocation) {

if (mLocation != null) {
double latitude = mLocation.getLatitude();
double longitude = mLocation.getLongitude();

myPoint = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));

mMapController.animateTo(myPoint);
// 设置地图中心点
mMapController.setCenter(myPoint);

// 设定比例尺
mMapController.setZoom(16);
}
}
};
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

@Override
protected void onDestroy() {
if(mBMapManager != null) {
mBMapManager.destroy();
mBMapManager = null;
}

super.onDestroy();
}

@Override
protected void onPause() {
if(mBMapManager != null) {

mBMapManager.getLocationManager().removeUpdates(mLocationListener);
mLocationOverlay.disableMyLocation();
mLocationOverlay.disableCompass();

mBMapManager.stop();
}

super.onPause();

}

@Override
protected void onResume() {
if(mBMapManager != null) {

mBMapManager.getLocationManager().requestLocationUpdates(mLocationListener);
mLocationOverlay.enableMyLocation();
mLocationOverlay.enableCompass();

mBMapManager.start();
}

super.onResume();

}
}


用的是百度地图

现在的问题是:
1.地图一打开,中心点定位在天安门,移动下地图,会移动到定位位置,显示出定位覆盖物,问题是如何在地图一打开就自动将中心点移动到定位位置?

2.mMapController.animateTo(myPoint)和 mMapController.setCenter(myPoint)两个方法其他地方调用后似乎也没有效果,也是在移动地图后才产生效果。

哪位百度地图的高手能解释一下,谢谢。
...全文
13191 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
会飞的大鲸鱼 2013-12-24
  • 打赏
  • 举报
回复
呵呵 在低版本的 定位中 如果加入 硬件加速 会导致 首次载入地图不会显示,必须手动划一下,才会加载地图,所以 硬件加速在它上可以随便用,在地图上 不建议开启硬件加速,我们这边的项目用到地图的 赢家加速已经全部关掉了。
jacky_tang47 2013-11-24
  • 打赏
  • 举报
回复
取消硬件加速会有什么后果吗?定位变慢?
liro 2012-12-26
  • 打赏
  • 举报
回复
引用 6 楼 lnw 的回复:
搞定了,貌似是百度地图sdk和高版本的adt不兼容 目前的解决方式是 在Android manifest文件里,添加以下属性到<application>标签里,针对整个应用开启硬件加速: <application android:hardwareAccelerated="true"> 或 <application android:hardwareAccele……
是因为4.0以后的android有硬件加速的开关,打开硬件加速后,会出现这样的问题。
沸腾 2012-12-26
  • 打赏
  • 举报
回复
搞定了,貌似是百度地图sdk和高版本的adt不兼容 目前的解决方式是 在Android manifest文件里,添加以下属性到<application>标签里,针对整个应用开启硬件加速: <application android:hardwareAccelerated="true"> 或 <application android:hardwareAccelerated="true"> <activity ... /> <activity android:hardwareAccelerated="false" /> </application> 还有种解决方法,直接移除 android:targetSdkVersion="15" ,不过还没试过
沸腾 2012-12-26
  • 打赏
  • 举报
回复
移动地图
沸腾 2012-12-26
  • 打赏
  • 举报
回复


非常奇怪的问题,貌似不会自动重新绘制页面,如图所示,我在缩小或放大地图,或者移动地图时,一直是这样,只有再手动移动一下地图,才会重新绘制。
liro 2012-12-25
  • 打赏
  • 举报
回复
第一次打开百度地图确实是这样。 我的做法是记录最后一次定位的经纬度,下次再打开的时候直接使用MapController的setCenter显示地图。然后onLocationChanged更新和显示最新的定位结果。
沸腾 2012-12-21
  • 打赏
  • 举报
回复
请问这两句放在什么位置? onCreate? onLocationChanged? onResume?
网络咖啡 2012-12-21
  • 打赏
  • 举报
回复
// 初始化Location模块 MKLocationManager mLocationManager = MapLogic.mBMapMan.getLocationManager(); // 通过enableProvider和disableProvider方法,选择定位的Provider mLocationManager.enableProvider(MKLocationManager.MK_GPS_PROVIDER);

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧