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) {
}
}