Android 고덕 지도 통합, 실시간 위치 추적 및 Marker 멀티플렉스 및 클릭 이벤트 구현

27988 단어
최근 프로젝트는 고덕지도api를 통합하여 포지셔닝을 실현하고 다중 전시와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을 통해 처리할 수 있습니다!
부분적인 그림은 자줏빛이다.




좋은 웹페이지 즐겨찾기