안드로이드 사용 높은 도덕적지도

1, 사용자 정의 마커, 메인 클래스 BitmapDescriptor 

BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromView(view);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap);

2 추가, 더 마커, 자식 스레드를 설정하는 필요, 새로운 핸들러 필요가 자식 스레드 루퍼를 제공합니다

데모의 높은 도덕적지도에서 배울 수, 주소 : https://github.com/amap-demo/android-cluster-marker

 

3,지도의 스타일을 설정 :

    private void setMapCustomStyleFile() {
       new Thread(new Runnable() {
           @Override
           public void run() {
               InputStream inputStream = null;
               CustomMapStyleOptions mapStyleOptions = new CustomMapStyleOptions();
               try {
                   inputStream = getBaseActivity().getAssets().open("style.data");
                   byte[] b = new byte[inputStream.available()];
                   inputStream.read(b);
                   if (mapStyleOptions != null) {
                       // 设置自定义样式
                       mapStyleOptions.setEnable(true);
                       mapStyleOptions.setStyleData(b);
                       aMap.setCustomMapStyle(mapStyleOptions);
                   }
               } catch (IOException e) {
                   e.printStackTrace();
               } finally {
                   try {
                       if (inputStream != null) {
                           inputStream.close();
                       }
                   } catch (IOException e) {
                       e.printStackTrace();
                   }
               } 
           }
       }).start();
    }

당신이 도시의 목록을 사용해야 할 경우 4, 높은 도덕적지도의 혼동 쓰기 불완전, 당신은 빨간색 줄을 추가해야합니다 :

#3D 地图 V5.0.0之前:
-keep class com.amap.api.maps.**{*;}
-keep class com.autonavi.amap.mapcore.*{*;}
-keep class com.amap.api.trace.**{*;}
#3D 地图 V5.0.0之后:
-keep class com.amap.api.maps.**{*;}
-keep class com.autonavi.**{*;}
-keep class com.amap.api.trace.**{*;}
#定位
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}
#搜索
-keep class com.amap.api.services.**{*;}
-keep class com.amap.poisearch.util.**{*;}#额外加上的
#2D地图
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}
#导航
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.**{*;}

-keep class com.app.main.framework.entity.**{*;}
-keep class com.cq.xiangwan.entity.**{*;}
-keep class com.cjt2325.cameralibrary.**{*;}

5 레벨 마커 표시 설정

MarkerOptions.zIndex(float z); 或者 Marker.setZIndex(float z);z值越大就越高,如果需要将Marker最靠近视角显示在最上面,只需要给每个marker设置它的纬度的负数即可。

6. 애니메이션 마커를 표시해야하는 경우, 비슷한 효과 GIF, 그것은 현재는 이미지의 설정 컬렉션에 보인다,하지만 두 사진을 느낀다면 조금 더이 휴대 전화, 가난한 휴대 전화 매 순간이 느낌을 걸어 거의 찾아

marker.setIcons(list); 

7, 역 지오 코딩

위도와 경도에 의해 도시, 위치에 대한 정보를 가져옵니다. LatLonPoint (더블 위도, 경도 더블)

package com.amap.map3d.demo.geocoder;

/**
 * 地理编码与逆地理编码功能介绍
 */
public class ReGeocoderActivity extends Activity implements
		OnGeocodeSearchListener {
 
	private GeocodeSearch geocoderSearch;
	private LatLonPoint latLonPoint = new LatLonPoint(39.90865, 116.39751);
	private Marker regeoMarker;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.geocoder_activity);
		geocoderSearch = new GeocodeSearch(this);
		geocoderSearch.setOnGeocodeSearchListener(this);
        getAddress(latLonPoint);
	}

	/**
	 * 响应逆地理编码
	 */
	public void getAddress(final LatLonPoint latLonPoint) {
		RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200, GeocodeSearch.AMAP);// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
		geocoderSearch.getFromLocationAsyn(query);// 设置异步逆地理编码请求
	}

	/**
	 * 地理编码查询回调
	 */
	@Override
	public void onGeocodeSearched(GeocodeResult result, int rCode) {
	}

	/**
	 * 逆地理编码回调
	 */
	@Override
	public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
		dismissDialog();
		if (rCode == AMapException.CODE_AMAP_SUCCESS) {
			if (result != null && result.getRegeocodeAddress() != null
					&& result.getRegeocodeAddress().getFormatAddress() != null) {
				addressName = result.getRegeocodeAddress().getFormatAddress()
						+ "附近";
				aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
						AMapUtil.convertToLatLng(latLonPoint), 15));
				regeoMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));
				ToastUtil.show(ReGeocoderActivity.this, addressName);
			} else {
				ToastUtil.show(ReGeocoderActivity.this, R.string.no_result);
			}
		} else {
			ToastUtil.showerror(this, rCode);
		}
	}

}

8, 지오 코딩

package com.amap.map3d.demo.geocoder;
/**
 * 地理编码与逆地理编码功能介绍
 */
public class GeocoderActivity extends Activity implements
		OnGeocodeSearchListener, OnClickListener {
	private ProgressDialog progDialog = null;
	private GeocodeSearch geocoderSearch;
	private String addressName;
	private AMap aMap;
	private MapView mapView;
	private Marker geoMarker;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.geocoder_activity);
        geocoderSearch = new GeocodeSearch(this);
		geocoderSearch.setOnGeocodeSearchListener(this);
        getLatlon("北京市朝阳区方恒国际中心A座");
	}

	/**
	 * 响应地理编码
	 */
	public void getLatlon(final String name) {
		
		GeocodeQuery query = new GeocodeQuery(name, "010");// 第一个参数表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode,
		geocoderSearch.getFromLocationNameAsyn(query);// 设置同步地理编码请求
	}

	/**
	 * 地理编码查询回调
	 */
	@Override
	public void onGeocodeSearched(GeocodeResult result, int rCode) {
		dismissDialog();
		if (rCode == AMapException.CODE_AMAP_SUCCESS) {
			if (result != null && result.getGeocodeAddressList() != null
					&& result.getGeocodeAddressList().size() > 0) {
				GeocodeAddress address = result.getGeocodeAddressList().get(0);

				if(address != null) {
					aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
							AMapUtil.convertToLatLng(address.getLatLonPoint()), 15));
					geoMarker.setPosition(AMapUtil.convertToLatLng(address
							.getLatLonPoint()));
					addressName = "经纬度值:" + address.getLatLonPoint() + "\n位置描述:"
							+ address.getFormatAddress();
					ToastUtil.show(GeocoderActivity.this, addressName);
				}
			} else {
				ToastUtil.show(GeocoderActivity.this, R.string.no_result);
			}
		} else {
			ToastUtil.showerror(this, rCode);
		}
	}

	/**
	 * 逆地理编码回调
	 */
	@Override
	public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
		
	}

}

 

게시 49 개 원래 기사 · 원 찬양 2 · 조회수 (8605)

추천

출처blog.csdn.net/yangjunjin/article/details/102806414