一、概述
今天再一次用到了地图定位功能和地图显示功能,以前一直用的是高德地图定位,这次还是用高德,记录一下以便以后再做时方便一些。因为业务需要的功能不是很全,可以参考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、图片效果:
4、首先是根据当前位置获得经纬度activity
(1)androidMainfest.xml中写入高德地图api的key值
<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="9cb6f84fb4821043af1bd1*******" />
(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<String, String> 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<LatLng> latLngList = new ArrayList<>();@Overrideprotected 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);// 往地图上添加位置标志markeraddMarkersToMap();}/*** 方法必须重写*/@Overrideprotected void onResume() {super.onResume();mapView.onResume();}/*** 方法必须重写*/@Overrideprotected void onPause() {super.onPause();mapView.onPause();}/*** 方法必须重写*/@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}/*** 方法必须重写*/@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}/*** 在地图上添加marker*/private void addMarkersToMap() {//List<BuildingBean> positions = (List<BuildingBean>) getIntent().getSerializableExtra("positions");List<BuildingBean> 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标注点点击响应事件*/@Overridepublic boolean onMarkerClick(final Marker marker) {return false;}/*** 监听amap地图加载成功事件回调*/@Overridepublic 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文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical" ><com.amap.api.maps2d.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>














