Algunas configuraciones del mapa de Baidu que rodean la función de recuperación y los puntos de marcador personalizados

De acuerdo con las necesidades del proyecto, se deben marcar dos tipos de puntos de coordenadas en el mapa. De acuerdo con este requisito, las coordenadas de diferentes fuentes deben clasificarse y visualizarse. La siguiente imagen es la representación:


Estoy usando la última versión 4.3.1 de Baidu SDK. En primer lugar, tengo que ir a la plataforma de desarrollo de API de mapas de Baidu para registrarme e iniciar sesión. Para usar el mapa de Baidu, necesito solicitar una clave:

1. Configuración del entorno de desarrollo:


Solo necesita probar el archivo correspondiente y el paquete jar en la carpeta sdk libs descargada en su propio proyecto y agregar la dependencia de cada paquete jar;


2. Agregue algunos permisos y configuraciones clave en el archivo AndroidManifest.xml:

Agregar permisos requeridos

< usos - permiso android : name = "android.permission.ACCESS_NETWORK_STATE" /> 
< usos - permiso android : name = "android.permission.INTERNET" /> 
< usos - permiso android : name = "com.android.launcher.permission .READ_SETTINGS "  /> 
< usos - permiso android : name = " android.permission.WAKE_LOCK " /> 
< usos - permiso android :nombre= "android.permission.CHANGE_WIFI_STATE"  /> 
< usos - permiso android : nombre = "android.permission.ACCESS_WIFI_STATE"  /> 
< usos - permiso android : nombre = "android.permission.GET_TASKS"  /> 
< usos - permiso android : name = "android.permission.WRITE_EXTERNAL_STORAGE" /> 
< usos - permiso android : name = "android.permission.WRITE_SETTINGS"  />	

Agregar clave de desarrollo en la aplicación

< Aplicación >   
    < meta - datos   
        android : nombre = "com.baidu.lbsapi.API_KEY"   
        androide : valor = "开发者tecla"  />   
</ aplicación >

3.  Correspondiente a las jarras de las que depende el proyecto de compilación en build.gradle, y es necesario agregar las siguientes configuraciones; de lo contrario, se informará un error

sourceSets { 
    main { 
        jniLibs. srcDirs = [ '' libs ' ] 
    } 
}

Hasta ahora, se ha completado la configuración básica de Baidu SDK. A continuación se describe cómo usarlo:

Primero, debe inicializar el SDK después de la actividad correspondiente o el método Application onCreate, también puede establecer el tipo izquierdo devuelto

. SDKInitializer la initialize (getApplicationContext ()) ;
 . SDKInitializer setCoordType (Partido coordtype. GCJ02 ) ; // predeterminado para coordinar BD09LL

Agregue un control de mapa en el archivo xml de diseño;

<com.baidu.mapapi.map.MapView
 android : id = "@ + id / baidumaps"
 android : layout_width = "match_parent"
 android : layout_height = "0dp"
 android : layout_weight = "1"
 android : clickable = "true" / >                    

Inicializar en actividad

private MapView mapView;
private BaiduMap baiduMap;
PoiSearch mPoiSearch;

mapView = (MapView) findViewById(R.id.baidumaps);
// BaiduMap gestiona un MapView específico: rotación, movimiento, escala, eventos. . .
baiduMap = la MapView .getMap () ;
 // establecer el nivel de zoom, el nivel predeterminado de 12 es
 MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory. zoomTo ( 19. ) ;
 baiduMap .setMapStatus (mapstatusUpdate) ;
 mPoiSearch . = PoiSearch la newInstance () ;
 mPoiSearch .setOnGetPoiSearchResultListener ( poiListener ) ;
nearbySearch ( 1 ) ;
Se puede invocar después de configurar parámetros básicos

/**
 * 附近检索
 */
private void nearbySearch(int page) {
    PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption();
    //120.220854,30.259387
    nearbySearchOption.location(new LatLng(latitude,longitude));
    nearbySearchOption.keyword("超市");//小吃快餐
    nearbySearchOption.radius(10000);// 检索半径,单位是米
    nearbySearchOption.pageNum(page);
    nearbySearchOption.pageCapacity(500);
    mPoiSearch.searchNearby(nearbySearchOption);// 发起附近检索请求
}
 
 

还要对mPoiSearch设置监听方法:

 OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener(){
        public void onGetPoiResult(PoiResult result){
            if (result.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
                Toast.makeText(ShopMapActivity.this, "没有搜索到结果...",
                        Toast.LENGTH_LONG).show();
            }

            else {
                baiduMap.clear();
                // 得到具体地址的坐标
 		// 此处是设置蓝色标记的方法 
                for(int i=0;i<result.getAllPoi().size();i++) {
                    PoiInfo pos = result.getAllPoi().get(i);

                    LatLng lat = pos.location;
                    // 得到一个标记的控制器
                    MarkerOptions mMarkerOptions = new MarkerOptions();
                    // 我们设置标记的时候需要传入的参数
                    BitmapDescriptor mbitmapDescriptor = BitmapDescriptorFactory
                            .fromResource(R.mipmap.location_blue);
                    // 设置标记的图标
                    mMarkerOptions.icon(mbitmapDescriptor);
                    // 设置标记的坐标
                    mMarkerOptions.position(lat);
                    mMarkerOptions.title(pos.name);
                    // 添加标记
                    baiduMap.addOverlay(mMarkerOptions);
                    // 设置地图跳转的参数
                    MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
                            .newLatLngZoom(lat, 15);
                    // 设置进行地图跳转
                    baiduMap.setMapStatus(mMapStatusUpdate);
                }                                  

红色标记点的设置 这里的list是一些模拟数据

for(int i=0;i<list.size();i++) {
    PoiInfo pos = result.getAllPoi().get(i);
    LatLng lat = list.get(i);
    // 得到一个标记的控制器
    MarkerOptions mMarkerOptions = new MarkerOptions();
    // 我们设置标记的时候需要传入的参数
    BitmapDescriptor mbitmapDescriptor = BitmapDescriptorFactory
            .fromResource(R.mipmap.location_red);
    // 设置标记的图标
    mMarkerOptions.icon(mbitmapDescriptor);
    // 设置标记的坐标
    mMarkerOptions.position(lat);
    mMarkerOptions.title(pos.name);
    // 添加标记
    baiduMap.addOverlay(mMarkerOptions);
    // 设置地图跳转的参数
    MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
            .newLatLngZoom(lat, 15);
    // 设置进行地图跳转
    baiduMap.setMapStatus(mMapStatusUpdate);
}
	baiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
                        @Override
                        public void onMapClick(LatLng latLng) {
                            baiduMap.hideInfoWindow();
                        }

                        @Override
                        public boolean onMapPoiClick(MapPoi mapPoi) {
                            return false;
                        }
                    });
                    baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
                        @Override
                        public boolean onMarkerClick(Marker marker) {
                            showLocation(marker);//点击marker显示详细信息
//                           
                            return true;
                        }
                    });
            }
            progressDialog.dismiss();
        }

        public void onGetPoiDetailResult(PoiDetailResult result){
            //获取Place详情页检索结果
            progressDialog.dismiss();
        }

        @Override
        public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {
            progressDialog.dismiss();
        }
    };
 private void showLocation(final Marker marker) {  //显示气泡
        // 创建InfoWindow展示的view
        LatLng pt = null;
        double latitude, longitude;
        latitude = marker.getPosition().latitude;
        longitude = marker.getPosition().longitude;
        InfoWindow infoWindow;
        TextView tv = new TextView(ShopMapActivity.this);
        tv.setBackgroundResource(R.drawable.change_btn_bg_gray);
        tv.setPadding(30, 20, 30, 20);// 大小
        tv.setText( marker.getTitle());
        tv.setTextColor(Color.parseColor("#000000"));
        final LatLng latLng = marker.getPosition();
        Point p = baiduMap.getProjection().toScreenLocation(latLng);
        p.y -= 47;
        LatLng ll = baiduMap.getProjection().fromScreenLocation(p);
        mInfoWindow = new InfoWindow(tv, ll, 1);
        baiduMap.showInfoWindow(mInfoWindow); //显示气泡

    }

protected void initData(Bundle savedInstanceState) {
    list.add(new LatLng(31.172713399983827,121.48811344710886));
    list.add(new LatLng(31.179060850684824,121.50363668006136));
    list.add(new LatLng(31.17131410477326,121.49315948551842));
    list.add(new LatLng(31.176633393276752,121.48780798968677));
    list.add(new LatLng(31.178353120267477,121.47352839282098));
}

最终实现的效果:


如果有ui刷新的操作 对空件的requestFocus请求将会失效  需要做个延迟操作

goodsSearch.postDelayed(new Runnable() {
public void run() {
etAddGoods.requestFocus();
}
},500);

发布了29 篇原创文章 · 获赞 40 · 访问量 3万+

Supongo que te gusta

Origin blog.csdn.net/xiyunmengyuan/article/details/75386127
Recomendado
Clasificación