262.高德地图的使用---启动定位获取定位数据(2)

参考文档:

https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation

https://lbs.amap.com/api/android-sdk/guide/draw-on-map/draw-marker

启动定位服务器

//启动定位服务器
protected  void doLocation()
{
	//1 创建一个客户端定位句柄
	_amapLocationClient = new AMapLocationClient(getApplicationContext());

	//2 给客户端句柄设置一个listenner来处理服务器返回的定位数据
	_amapLocationClient.setLocationListener(new AMapLocationListener() {
		@Override
		public void onLocationChanged(AMapLocation aMapLocation) {
			//onLocationChanged 就是如果服务器给客户端返回数据,调用的回调函数
			//aMapLocation 就是服务器给客户端返回的定位数据

			if (aMapLocation != null) {
				//服务器是有响应的

				if(aMapLocation.getErrorCode() == 0) {
					//定位成功,aMapLocation获取数据
					Log.e("Amap", "location succ address = "+ aMapLocation.getAddress());
					Log.e("Amap", "city = "+ aMapLocation.getCity());
					Log.e("Amap", "longtitude = " + aMapLocation.getLongitude());
					Log.e("Amap", "latitude = " + aMapLocation.getLatitude());

				}
				else {
					//定位失败,

					Log.e("Amap", "location error, code = "+ aMapLocation.getErrorCode()+
							", info = "+ aMapLocation.getErrorInfo());
				}
			}
		}
	});

	//3 开启定位服务
	_amapLocationClient.startLocation();
}

向固定的经纬度添加一个标记,添加一个位置的图片

//向固定的经纬度添加一个标记
    protected void addMarkerToMap(double latitude, double longitude)
    {
        _selfMarker = _amap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude))
                .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker))));
    }

以某个经纬度为中心来展示地图

//以某个经纬度为中心来展示地图
    protected void moveMap(double latitude, double longtiude)
    {
        LatLng lagLng = new LatLng(latitude, longtiude);

        //移动amap地图 以之前的缩放比例展示
        _amap.animateCamera(CameraUpdateFactory.newLatLngZoom(lagLng, _amap.getCameraPosition().zoom));
    }

获取服务器返回的定位数据

//2 给客户端句柄设置一个listenner来处理服务器返回的定位数据
_amapLocationClient.setLocationListener(new AMapLocationListener() {
	@Override
	public void onLocationChanged(AMapLocation aMapLocation) {
		//onLocationChanged 就是如果服务器给客户端返回数据,调用的回调函数
		//aMapLocation 就是服务器给客户端返回的定位数据

		if (aMapLocation != null) {
			//服务器是有响应的

			if(aMapLocation.getErrorCode() == 0) {
				//定位成功,aMapLocation获取数据
				Log.e("Amap", "location succ address = "+ aMapLocation.getAddress());
				Log.e("Amap", "city = "+ aMapLocation.getCity());
				Log.e("Amap", "longtitude = " + aMapLocation.getLongitude());
				Log.e("Amap", "latitude = " + aMapLocation.getLatitude());

			}
			else {
				//定位失败,

				Log.e("Amap", "location error, code = "+ aMapLocation.getErrorCode()+
						", info = "+ aMapLocation.getErrorInfo());
			}
		}
	}
});

DriverActivity.java

package com.ldw.hello;

import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapOptions;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;

public class DriverActivity extends AppCompatActivity {

    //创建一个地图容器MapView对象
    private MapView _mapView = null;
    //地图的UISetting对象 给amap设置地图内嵌控件
    private UiSettings _uiSettings = null;
    //地图对象
    private AMap _amap = null;

    //定位服务器客户端句柄
    private AMapLocationClient _amapLocationClient = null;
    //定位服务器客户端句柄属性
    private AMapLocationClientOption _amapLocationOption = null;

    //显示自我位置的图标
    private Marker _selfMarker = null;



    boolean isAddSelfMarker = false;
    int flag = 0;
    int traffic_flag = 0;


    protected void initUI() {
        //将地图容器跟MapView控件相关联
        _mapView = (MapView) findViewById(R.id.DriverMap);

    }

    protected void createMap(Bundle savedInstanceState) {
        //展示地图容器
        _mapView.onCreate(savedInstanceState);


        //得到amap对象
        _amap = _mapView.getMap();

        //默认显示实时交通信息
        _amap.setTrafficEnabled(true);


        //得到UISettings
        _uiSettings = _amap.getUiSettings();

        //添加一个指南针控件
        _uiSettings.setCompassEnabled(true);

        //添加一个缩放比例尺
        _uiSettings.setScaleControlsEnabled(true);

        //修改logo位置
        _uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT);

    }

    //以某个经纬度为中心来展示地图
    protected void moveMap(double latitude, double longtiude)
    {
        LatLng lagLng = new LatLng(latitude, longtiude);

        //移动amap地图 以之前的缩放比例展示
        _amap.animateCamera(CameraUpdateFactory.newLatLngZoom(lagLng, _amap.getCameraPosition().zoom));
    }

    //向固定的经纬度添加一个标记
    protected void addMarkerToMap(double latitude, double longitude)
    {
        _selfMarker = _amap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude))
                .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker))));
    }

    //启动定位服务器
    protected  void doLocation()
    {
        //1 创建一个客户端定位句柄
        _amapLocationClient = new AMapLocationClient(getApplicationContext());

        //1.5 给定位客户端设置一些属性
        _amapLocationOption = new AMapLocationClientOption();
        //每个5s定位一次
        _amapLocationOption.setInterval(3000);
        //_amapLocationOption.setOnceLocation(true);

        //将option设置给client对象
        _amapLocationClient.setLocationOption(_amapLocationOption);

        //2 给客户端句柄设置一个listenner来处理服务器返回的定位数据
        _amapLocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                //onLocationChanged 就是如果服务器给客户端返回数据,调用的回调函数
                //aMapLocation 就是服务器给客户端返回的定位数据

                if (aMapLocation != null) {
                    //服务器是有响应的

                    if(aMapLocation.getErrorCode() == 0) {
                        //定位成功,aMapLocation获取数据
                        Log.e("Amap", "location succ address = "+ aMapLocation.getAddress());
                        Log.e("Amap", "city = "+ aMapLocation.getCity());
                        Log.e("Amap", "longtitude = " + aMapLocation.getLongitude());
                        Log.e("Amap", "latitude = " + aMapLocation.getLatitude());

                        if (isAddSelfMarker == false) {
                            //在此位置添加一个标记
                            addMarkerToMap(aMapLocation.getLatitude(), aMapLocation.getLongitude());
                            isAddSelfMarker = true;

                            //以自我为中心展示地图
                            moveMap(aMapLocation.getLatitude(), aMapLocation.getLongitude());
                        }



                    }
                    else {
                        //定位失败,

                        Log.e("Amap", "location error, code = "+ aMapLocation.getErrorCode()+
                                ", info = "+ aMapLocation.getErrorInfo());
                    }
                }
            }
        });

        //3 开启定位服务
        _amapLocationClient.startLocation();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_driver);

        initUI();

        createMap(savedInstanceState);

        doLocation();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        _mapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        _mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();

        _mapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        _mapView.onSaveInstanceState(outState);
    }
}

 

在uni-app的H5项目中,可以使用高德地图API获取当前定位。下面是一种实现方式: 1. 首先,在uni-app项目中安装高德地图插件。可以通过以下命令进行安装: ``` npm install @types/amap-js-api --save ``` 2. 在需要获取定位的页面中,引入高德地图的JS API。可以在`index.html`文件中添加以下代码: ```html <script src="https://webapi.amap.com/maps?v=1.4.15&key=your_amap_key"></script> ``` 其中,`your_amap_key`需要替换为你自己的高德地图开发者密钥。 3. 在页面的`methods`中,编写获取定位的方法。可以使用高德地图提供的`AMap.Geolocation`类来实现。以下是一个示例代码: ```javascript methods: { getLocation() { AMap.plugin('AMap.Geolocation', () => { const geolocation = new AMap.Geolocation({ enableHighAccuracy: true, // 是否使用高精度定位,默认为true timeout: 10000, // 超过10秒后停止定位,默认:无穷大 }); geolocation.getCurrentPosition((status, result) => { if (status === 'complete') { // 定位成功,result中包含经纬度等信息 const { lng, lat } = result.position; console.log('当前位置经纬度:', lng, lat); } else { // 定位失败 console.log('定位失败'); } }); }); } } ``` 4. 在页面中调用`getLocation`方法即可获取当前定位信息。可以在按钮的点击事件中调用该方法: ```html <button @click="getLocation">获取当前定位</button> ``` 这样,当用户点击按钮时,就会触发获取当前定位的操作,并将结果输出到控制台中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值