android中高德地图定位功能并且获取定位的城市

一、概述

今天再一次用到了地图定位功能和地图显示功能,以前一直用的是高德地图定位,这次还是用高德,记录一下以便以后再做时方便一些。因为业务需要的功能不是很全,可以参考https://www.2cto.com/kf/201504/396156.html

高德地图申请成为开发者后的限制次数:

Key平台类型

服务

个人开发者

认证个人开发者

企业开发者

调用量

(次/日)

并发量

(次/秒)

调用量

(次/日)

并发量

(次/秒)

调用量

(次/日)

并发量

(次/秒)

Web服务API

地理编码

6000

100

300000

200

3000000

1000

逆地理编码

6000

100

300000

200

3000000

1000

驾车路径规划

2000

50

30000

50

300000

200

公交路径规划

2000

50

30000

50

300000

200

步行路径规划

2000

50

30000

50

300000

200

骑行路径规划

2000

50

30000

50

300000

200

距离测量

2000

50

30000

50

300000

200

搜索

2000

50

30000

50

300000

200

输入提示

2000

50

30000

50

300000

200

行政区查询

2000

50

30000

50

300000

200

交通态势

2000

20

30000

50

300000

200

抓路服务

2000

50

30000

50

300000

200

云图搜索

2000

20

30000

50

300000

200

云图存储

2000

20

30000

50

300000

200

静态地图

100000

400

3000000

500

6000000

1000

IP定位

100000

100

300000

200

3000000

1000

坐标转换

100000

100

300000

200

3000000

1000

天气查询

100000

100

300000

200

3000000

1000

智能硬件定位

无法申请Key

无法申请Key

无法申请Key

无法申请Key

3000000

1000

2、图片效果:

android中高德地图定位功能并且获取定位的城市_第1张图片

4、首先是根据当前位置获得经纬度activity

(1)androidMainfest.xml中写入高德地图api的key值

(2)引入地图和定位的jar包(到网上下载最新的)

//地图显示功能
compile files('libs/AMap_2DMap_V2.9.0_20160525.jar')
//地图定位功能
compile files('libs/AMap_Location_V2.5.0_20160526.jar')

(3)Activity类实现定位监听

public class MainBuildingActivity extends MainActivity implements AMapLocationListener

(4)

private AMapLocationClient locationClient = null;
private AMapLocationClientOption locationOption = null;
locationClient = new AMapLocationClient(this.getApplicationContext());
locationOption = new AMapLocationClientOption();
// 设置定位模式为高精度模式
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// 设置定位监听
locationClient.setLocationListener(this);
initOption();
locationClient.setLocationOption(locationOption);
locationClient.startLocation();
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
    if (aMapLocation.getErrorCode() == 0) {
        final Map map = new HashMap<>();
        //获取纬度
        map.put("longitude", String.valueOf(aMapLocation.getLongitude()));
        map.put("latitude", String.valueOf(aMapLocation.getLatitude()));
        ToastUtil.showShort(MainBuildingActivity.this,"___"+aMapLocation.getCity());
        Log.i("feng",aMapLocation.getCity());
    }
}

    private void initOption() {
        // 设置是否需要显示地址信息
        locationOption.setNeedAddress(true);
        /**
         * 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位
         * 注意:只有在高精度模式下的单次定位有效,其他方式无效
         */
//        locationOption.setGpsFirst(true);
        // 设置是否开启缓存
        locationOption.setLocationCacheEnable(true);
        // 设置发送定位请求的时间间隔,最小值为1000,如果小于1000,按照1000算
        locationOption.setInterval(5000);
        locationOption.setOnceLocation(true);
    }

 

5、根据经纬度在地图上显示的功能Activity

 

public class BuildingPostionActivity extends BaseActivity implements OnMapLoadedListener,AMap.OnMarkerClickListener {
    private AMap aMap;
    private MapView mapView;
    private List latLngList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);
        mapView = findViewById(R.id.map);
        mapView.onCreate(savedInstanceState); // 此方法必须重写
        init();
    }

    /**
     * 初始化AMap对象
     */
    private void init() {
        setTitle("楼盘位置",false,null);
        registerBack();
        if (aMap == null) {
            aMap = mapView.getMap();
            setUpMap();
        }
    }

    private void setUpMap() {
        aMap.setOnMapLoadedListener(BuildingPostionActivity.this);// 设置amap加载成功事件监听器
        aMap.setOnMarkerClickListener(this);
        // 往地图上添加位置标志marker
        addMarkersToMap();
    }

    /**
     * 方法必须重写
     */
    @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);
    }

    /**
     * 方法必须重写
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    /**
     * 在地图上添加marker
     */
    private void addMarkersToMap() {
         //List positions = (List) getIntent().getSerializableExtra("positions");
        List positions=new ArrayList<>();
        BuildingBean bean=new BuildingBean();
        bean.setLatitude("123.623458");
        bean.setLongitude("41.780748");
        bean.setBuildingName("滑翔小区");
        positions.add(bean);
        for (BuildingBean position:positions) {
            LatLng latLng = new LatLng(Double.valueOf(position.getLongitude()),Double.valueOf(position.getLatitude()));

            Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).icon(
                    BitmapDescriptorFactory.fromResource(R.drawable.location)).title(position.getBuildingName()));
            marker.showInfoWindow();
            latLngList.add(latLng);
        }
    }

         /**
          * 对marker标注点点击响应事件
          */
         @Override
         public boolean onMarkerClick(final Marker marker) {

             return false;
         }


    /**
     * 监听amap地图加载成功事件回调
     */
    @Override
    public void onMapLoaded() {
        // 设置所有maker显示在当前可视区域地图中
        LatLngBounds.Builder builder = new LatLngBounds.Builder();
        for (LatLng latLng:latLngList) {
            builder.include(latLng);
        }
        LatLngBounds build = builder.build();
        aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(build, 10));
        aMap.moveCamera(CameraUpdateFactory.zoomBy(4));
        aMap.setOnMapLoadedListener(this);//设置地图显示监听器
    }
}

(2)xml文件



        

 

 

 

 

你可能感兴趣的:(Android)