package com.gaodeditu3; import android.graphics.BitmapFactory; import android.graphics.Color; import android.os.Bundle; import android.provider.SyncStateContract; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; 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.CameraUpdate; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.MapView; import com.amap.api.maps.model.ArcOptions; import com.amap.api.maps.model.BitmapDescriptor; 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; import com.amap.api.maps.model.PolylineOptions; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by lenovo on 2016/8/22. */ public class MapFragment extends Fragment implements AMap.OnInfoWindowClickListener,AMap.OnMarkerClickListener { // MapView mMapView = null; private MapView mapView; private AMap aMap; //声明AMapLocationClient类对象 public AMapLocationClient mLocationClient = null; //声明mLocationOption对象 public AMapLocationClientOption mLocationOption = null; //定位经纬度 private double lat; private double lon; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); View v=View.inflate(getActivity(),R.layout.map,null); //获取地图控件引用 mapView = (MapView) v.findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理 mapView.onCreate(savedInstanceState); //初始化定位 mLocationClient = new AMapLocationClient(getActivity()); //设置定位回调监听 mLocationClient.setLocationListener(mLocationListener); //初始化地图控件 init(); //区域地图显示 makeLoaction(38.679879, 120.064855, 7); return v; } // 区域地图显示 public void makeLoaction(double latitude, double longitude, float zoom) { LatLng latLng = new LatLng(latitude, longitude); //设置位置和缩放的比例 CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, zoom); aMap.moveCamera(cameraUpdate); setmarker(latLng); //多个marker 点经纬对象 LatLng latLng1 = new LatLng(35.9022, 119.3922); LatLng latLng2 = new LatLng(39.607723, 126.397741); LatLng latLng3 = new LatLng(39.917723, 116.6552); LatLng latLng4 = new LatLng(39.9022, 110.3922); List<LatLng> list=new ArrayList<LatLng>(); list.add(latLng1); list.add(latLng2); list.add(latLng3); list.add(latLng4); //添加多个marker amrker for(int i=0;i<list.size();i++){ aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f) .icon(BitmapDescriptorFactory.fromResource(R.drawable.ship)) .position(list.get(i)).title("成都市") .snippet("成都市:30.679879, 104.064855") .draggable(true).period(50) ) .setRotateAngle(90); } //三点的折线 aMap.addPolyline((new PolylineOptions()) .add(latLng1, latLng2, latLng3 ,latLng4, latLng1) .width(2).setDottedLine(true).geodesic(true) .color(Color.argb(255, 1, 1, 1)) .color(Color.RED)); // 绘制一个乌鲁木齐到哈尔滨的大地曲线 aMap.addPolyline((new PolylineOptions()) .add(new LatLng(43.828, 87.621), new LatLng(45.808, 126.55)) .geodesic(true).color(Color.RED)); } private void setmarker(LatLng latLng) { //添加一个marker 点 Marker marker = aMap.addMarker( new MarkerOptions().anchor(0.5f, 0.5f) .icon(BitmapDescriptorFactory.fromResource(R.drawable.ship)) .position(latLng).title("成都市") .snippet("成都市:30.679879, 104.064855") .draggable(true).period(50) ); //为marker 设置监听 // aMap.setOnMarkerClickListener(this); // // aMap.setOnInfoWindowClickListener(this); //维infoWindow 设置适配 自定义布局 aMap.setInfoWindowAdapter(new AMap.InfoWindowAdapter() { @Override public View getInfoWindow(Marker marker) { //自定义布局 View v=View.inflate(getActivity(),R.layout.tankuan,null); return v; } @Override public View getInfoContents(Marker marker) { return null; } }); //marker 显示 marker.showInfoWindow(); } /** * * 初始化AMap对象 */ private void init() { if (aMap == null) { aMap = mapView.getMap(); } // setUpMap(); } @Override public void onStop() { super.onStop(); mLocationClient.stopLocation();//停止定位 } @Override public void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mapView.onDestroy(); mLocationClient.onDestroy();//销毁定位客户端。 } @Override public void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理 mapView.onResume(); } @Override public void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理 mapView.onPause(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理 mapView.onSaveInstanceState(outState); } /** * 配置定位参数 */ private void setUpMap() { //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //设置是否只定位一次,默认为false mLocationOption.setOnceLocation(false); //设置是否强制刷新WIFI,默认为强制刷新 mLocationOption.setWifiActiveScan(true); //设置是否允许模拟位置,默认为false,不允许模拟位置 mLocationOption.setMockEnable(false); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(8000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation(); } /** * 声明定位回调监听器 */ public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 amapLocation.getLatitude();//获取纬度 amapLocation.getLongitude();//获取经度 amapLocation.getAccuracy();//获取精度信息 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(amapLocation.getTime()); df.format(date);//定位时间 amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 amapLocation.getCountry();//国家信息 amapLocation.getProvince();//省信息 amapLocation.getCity();//城市信息 amapLocation.getDistrict();//城区信息 amapLocation.getStreet();//街道信息 amapLocation.getStreetNum();//街道门牌号信息 amapLocation.getCityCode();//城市编码 amapLocation.getAdCode();//地区编码 amapLocation.getAoiName();//获取当前定位点的AOI信息 lat = amapLocation.getLatitude(); lon = amapLocation.getLongitude(); Log.v("pcw", "lat : " + lat + " lon : " + lon); Log.v("pcw", "Country : " + amapLocation.getCountry() + " province : " + amapLocation.getProvince() + " City : " + amapLocation.getCity() + " District : " + amapLocation.getDistrict()); // 设置当前地图显示为当前位置 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19)); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(new LatLng(lat, lon)); markerOptions.title("当前位置"); markerOptions.visible(true); BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); markerOptions.icon(bitmapDescriptor); aMap.addMarker(markerOptions); mLocationClient.stopLocation();//停止定位 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } } }; //infowindow 的监听回调 @Override public void onInfoWindowClick(Marker marker) { } //Marker 的监听回调 @Override public boolean onMarkerClick(Marker marker) { return false; } }
高德地图集成
最新推荐文章于 2023-05-30 14:06:30 发布