百度地图定位 为什么经纬度是准确的 而在地图上标注却偏离很远
我是按网上论坛写的 让后下载他们的demo地图上标注是正确的 而我自己的地图上标注却偏离很远
package com.example.baidu_text;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.baidu.lbsapi.BMapManager;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.DotOptions;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.TextOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.nplatform.comapi.map.MapController;
public class MainActivity extends Activity {
MapView mMapView = null;
BaiduMap mBaiduMap;
String mm;
Button button;
double latitude;
double longitude;
BaiduMap bdMap;
private BMapManager mBMapManager;
BitmapDescriptor mCurrentMarker;
private MapController mMapController = null;
BDLocation location;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView)findViewById(R.id.bmapView);
bdMap = mMapView.getMap();
LocationClient locationClient = new LocationClient(getApplicationContext());
LocationClientOption locOption = new LocationClientOption();
locOption.setLocationMode(LocationMode.Hight_Accuracy);
locOption.setCoorType("bd0911");
locOption.setScanSpan(5000);
locOption.setIsNeedAddress(true);
locOption.setNeedDeviceDirect(true);
locationClient.setLocOption(locOption);
locationClient.registerLocationListener(new MyLocationListener());
locationClient.start();
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LatLng ll = new LatLng(latitude, longitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
bdMap.animateMapStatus(msu);
Toast.makeText(MainActivity.this, mm, Toast.LENGTH_LONG).show();
TextOptions textOptions = new TextOptions();
textOptions.bgColor(0xFFFF00)
.fontSize(10)
.fontColor(0xFFFF00FF)
.text("当前位置")
.rotate(-30)
.position(ll);
bdMap.addOverlay(textOptions);
String mm =latitude+"";
String nn =longitude+"";
Toast.makeText(MainActivity.this, mm+"__"+nn, Toast.LENGTH_LONG).show();
}
});
}
class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation arg0) {
mm = arg0.getCity();
latitude = arg0.getLatitude();
longitude = arg0.getLongitude();
location = arg0;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
------解决思路----------------------
这个是很早就认定的事情,百度也会出来一堆结果的。
1.代码纠偏 2.查询纠偏数据库。
第1种方便些。
------解决思路----------------------
好单纯的楼主,我告诉你,在中国所有正规的地图都是偏的,谷歌地图不想偏被赶走了.
要在哪个地图上显示,就要使用哪个地图对应的转换函数,不能混用,而且不能反向转换.
------解决思路----------------------
1、试一下location.isOpenGps()
打开gps定位会不会好一些
2、BDLocationListener里,貌似获得了位置但是没在界面上更新吧?
这个看百度的location的demo就好了
------解决思路----------------------
CoordinateConverter类,限于V3以上版本。
我们用的著名的付费火星地图。