您的位置:首页 > 其它

关于新手开发出来的地图偏差太大的问题,进行坐标转换

2017-03-04 11:06 260 查看
本文为解决开发出来的百度地图坐标偏差问题,如果不进行坐标转换将误差1公里左右,

具体参考百度官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/tool

以下为我的代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_baidu_map__main"
android:layout_width="match_parent" android:layout_height="match_parent"

tools:context="com.example.baidumaptest.baiduMap_MainActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/map_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:clickable="true"/>

</RelativeLayout>


下面就是Java代码
package com.example.baidumaptest;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLoca
4000
tionData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.utils.CoordinateConverter;

import java.util.List;

public class baiduMap_MainActivity extends AppCompatActivity {
private MapView mapView;
private BaiduMap baiduMap;
private LocationManager locationManager;
private String provider;
private Boolean isFirstLocate = true;

@Override
protected void onDestroy() {
super.onDestroy();
baiduMap.setMyLocationEnabled(false);
mapView.onDestroy();
if (locationManager != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.removeUpdates(locationListener);
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_baidu_map__main);
mapView = (MapView) findViewById(R.id.map_view);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
baiduMap = mapView.getMap();
baiduMap.setMyLocationEnabled(true);
List<String> providerList = locationManager.getProviders(true);
if (providerList.contains(locationManager.GPS_PROVIDER)) {
provider = locationManager.GPS_PROVIDER;
}
if (providerList.contains(locationManager.NETWORK_PROVIDER)) {
provider = locationManager.NETWORK_PROVIDER;
} else {
Toast.makeText(this, "no location provider to use", Toast.LENGTH_SHORT).show();
return;
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = locationManager.getLastKnownLocation(provider);
if (location!=null){
navigateTo(location);
}
locationManager.requestLocationUpdates(provider,3000,1,locationListener);
}

private void navigateTo(Location location) {
if (isFirstLocate){
LatLng sourceLatLng=new LatLng(location.getLatitude(),location.getLongitude());
//下面开始对坐标进行转换(转换成百度的坐标计算方式)
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordinateConverter.CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();
//转换结束,desLatLng即为转换后的坐标
MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(desLatLng);
baiduMap.animateMapStatus(update);
update=MapStatusUpdateFactory.zoomTo(19f);
baiduMap.animateMapStatus(update);
isFirstLocate=false;
}
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordinateConverter.CoordType.GPS);
converter.coord(new LatLng(location.getLatitude(),location.getLongitude()));
LatLng desLatLng = converter.convert();
MyLocationData.Builder locationBuilder=new MyLocationData.Builder();
locationBuilder.latitude(desLatLng.latitude);
locationBuilder.longitude(desLatLng.longitude);
MyLocationData locationdata=locationBuilder.build();
baiduMap.setMyLocationData(locationdata);

}
LocationListener locationListener=new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location!=null){
navigateTo(location);
}
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
};
}
顺便贴一下关于声明文件代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baidumaptest">

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<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" />
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="yGdRyv6mdsfLGr9O6ofaEhaGGaekklrf"/>
<activity android:name=".baiduMap_MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐