Android 고덕 지도 통합, 실시간 위치 추적 및 Marker 멀티플렉스 및 클릭 이벤트 구현
1. 먼저 고덕지도 Api의 통합이다. 먼저 고덕지도 홈페이지에 가서 SHA1값과 대응하는 키값을 얻어야 한다. 이 홈페이지의 설명은 비교적 상세하고 군말 없이 SHA1값을 얻을 때 세 번째 방식으로 TOOL을 통해 간단하고 정확하게 얻는 것을 권장한다.
2.jar 패키지와.so의 가져오기: 추가를 제외하고는 Dependencies를 통해 직접 추가하는 것을 권장합니다.so등이 일으킨 불필요한 번거로움.3d,search,location;
3. 준비 완료 후 초기화:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gdmap);
mapView = findViewById(R.id.view_gdmap);
mapView.onCreate(savedInstanceState);
initView();
initMap();
}
private void initMap(){ if (aMap == null){ aMap = mapView.getMap(); aMap.setLocationSource(this);// , LocationSource aMap.getUiSettings().setMyLocationButtonEnabled(true); // aMap.setMyLocationEnabled(true);// , flase aMap.moveCamera(CameraUpdateFactory.zoomTo(15));// MyLocationStyle myLocationStyle = new MyLocationStyle();// myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);// 、 , , 。(1 1 ) myLocationType, 。 myLocationStyle.strokeColor(Color.TRANSPARENT);// myLocationStyle.radiusFillColor(Color.TRANSPARENT);// aMap.setMyLocationStyle(myLocationStyle);// Style aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { marker.showInfoWindow(); String number = marker.getId().substring(6); if (!number.equals("")&&number!=null){ int posions = Integer.parseInt(number)-2;}
4.在上面代码中末尾添加了marker的点击事件,首先showInfowindow(),是为了避免添加点击事件后点击marker时原有的title不会显示。另外避免在title中显示position,所以采取获得id之后截取字符串并减去2的方式获得marker点数据集合的position,这样就可以在点击事件中去处理数据和相关的事件;5.下面是处理定位的一些方法,代码,已经有了比较详细的注解;@Override public void activate(OnLocationChangedListener listener) { mListener = listener; if (aMapLocationClient == null) { // aMapLocationClient = new AMapLocationClient(this); // aMapLocationClientOption = new AMapLocationClientOption(); // aMapLocationClient.setLocationListener(this); // aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // // mLocationOption.setOnceLocation(true); // aMapLocationClient.setLocationOption(aMapLocationClientOption); aMapLocationClient.startLocation();// } } @Override public void deactivate() { mListener = null; if (aMapLocationClient != null) { aMapLocationClient.stopLocation(); aMapLocationClient.onDestroy(); } aMapLocationClient = null; } /** * * @param amapLocation */ @Override public void onLocationChanged(AMapLocation amapLocation) { if (mListener != null && amapLocation != null) { if (amapLocation != null &&amapLocation.getErrorCode() == 0) { mListener.onLocationChanged(amapLocation);// String location = " :"+amapLocation.getProvider()+amapLocation.getCity()+amapLocation.getStreet()+amapLocation.getStreetNum(); } else { String errText = " ," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo(); } } } @Override protected void onDestroy() { super.onDestroy(); // activity onDestroy mMapView.onDestroy(), mapView.onDestroy(); } @Override protected void onResume() { super.onResume(); // activity onResume mMapView.onResume (), mapView.onResume(); } @Override protected void onPause() { super.onPause(); // activity onPause mMapView.onPause (), mapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // activity onSaveInstanceState mMapView.onSaveInstanceState (outState), mapView.onSaveInstanceState(outState); }
6. 마지막으로 우리는 모든 점을 수요에 따라 지도에 전시할 수 있다. 코드에서 0.1.2.3.4는 구체적인 수요에 따라 서로 다른 아이콘을 추가할 수 있다. 예를 들어 호텔, 식당...// POI private void addmarker(int position,int i){ MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(new LatLng(Double.parseDouble(poiLists.get(position).getY()),Double.parseDouble(poiLists.get(position).getX()))); markerOptions.draggable(false); markerOptions.title(poiLists.get(position).getName() ); if (i == 0){ markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.site_0))); }else if (i == 1){ markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.site_1))); }else if (i == 2){ markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.site_2))); }else if (i == 3){ markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.site_3))); }else if (i == 4){ markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.site_4))); } aMap.addMarker(markerOptions); }
7. 구체적인 클릭 이벤트 처리는 3의 클릭 이벤트에서position을 통해 처리할 수 있습니다!
부분적인 그림은 자줏빛이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.