[] Gcj02LatLng = wgs84_To_Gcj02(locationResult.getLastHWLocation().getLatitude(),locationResult.getLastHWLocation().getLongitude());
Log.d("LOG_HwMyLocation", "Gcj-02坐标系经纬度:" + Gcj02LatLng[0]+" ; "+Gcj02LatLng[1]+"\n");
//将转换坐标系之后的经纬度 标记在地图上
addGCJ02LocationMarker(Gcj02LatLng[0], Gcj02LatLng[1]);
c. 转换结果—日志表现:
d. 转换结果-用户界面表现:从两图可以看出,转换坐标系之后的经纬度 与 用户实际所在位置经纬度无偏差。
4. 将GCJ-02坐标系的经纬度通过huaweiMap.setLocationSource(LocationSouce locationSouce)方法设置为我的位置图层的定位源,具体实现如下:
- 新建MyLocationSouce类,定义定位源。
private class MyLocationSouce implements LocationSource {
private OnLocationChangedListener listener;
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
listener = onLocationChangedListener;
}
@Override
public void deactivate() {
}
/**
* 改变我的位置图层的定位源
* @param lat_gcj02 GCJ-02
* @param log_gcj02 GCJ-02
*/
public void changeMyLocationSouce(double lat_gcj02, double log_gcj02) {
Location location = new Location("Provider");
location.setLatitude(lat_gcj02);
location.setLongitude(log_gcj02);
//设置精度
location.setAccuracy(200);
//当获取到新的用户位置时,调用此方法,设置定位源
listener.onLocationChanged(location);
}
}
- 初始化MyLocationSouce类 并 将MyLocationSouce设置为我的位置图层的定位源:
private MyLocationSouce myLocationSouce;
@Override
public void onMapReady(HuaweiMap huaweiMap) {
this.huaweiMap = huaweiMap;
huaweiMap.setMyLocationEnabled(true);
//初始化LocationSouce并设置我的位置图层的位置源
if (null == myLocationSouce){
myLocationSouce = new MyLocationSouce();
}
huaweiMap.setLocationSource(myLocationSouce);
}
- 在LocationCallback回调方法中 将GCJ-02坐标系的经纬度 设置为定位源。
/**
* 定义位置更新回调
*/
LocationCallback mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
// TODO: 处理位置回调结果
addLocationMarker(locationResult.getLastHWLocation().getLatitude(), locationResult.getLastHWLocation().getLongitude());
Log.d("LOG_HwMyLocation", "WGS-86坐标系经纬度:" + locationResult.getLastHWLocation().getLatitude() +
" ; " + locationResult.getLastHWLocation().getLongitude());
Log.d("LOG_HwMyLocation", "===============转换地理坐标系===============");
double[] Gcj02LatLng = wgs84_To_Gcj02(locationResult.getLastHWLocation().getLatitude(), locationResult.getLastHWLocation().getLongitude());
Log.d("LOG_HwMyLocation", "Gcj-02坐标系经纬度:" + Gcj02LatLng[0] + " ; " + Gcj02LatLng[1] + "\n");
//将转换坐标系之后的经纬度 标记在地图上
addGCJ02LocationMarker(Gcj02LatLng[0], Gcj02LatLng[1]);
if (null != myLocationSouce){
myLocationSouce.changeMyLocationSouce(Gcj02LatLng[0],Gcj02LatLng[1]);
}
}
}
};
5. 效果展示:
通过下方两图可以看出,我的位置图层与用户实际所在位置一致,且无偏差。
六、 Map SDK和Location SDK所需的权限列表有:
- Map SDK需要添加的权限列表:
<!-- 您调用地图服务能力,必须在“AndroidManifest”中为您的应用添加下列权限: -->
<!--允许程序访问网络连接-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--允许程序获取网络信息状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--自定义权限,允许程序读取公共数据-->
<uses-permission android:name="com.huawei.appmarket.ser