当前位置: 代码迷 >> 综合 >> AndroidStudio 中使用 百度地图 二 百度地图的使用,个人摘要
  详细解决方案

AndroidStudio 中使用 百度地图 二 百度地图的使用,个人摘要

热度:14   发布时间:2023-12-16 15:46:54.0

之前摘录了百度地图的集成:AndroidStudio 中使用 百度地图 <一> 百度地图的导入和集成,个人摘要

现在摘录使用百度地图,包括设置地图的类型,交通状况 以及设置如何设置标记。


0:可以设置地图是卫星地图还是否带有交通路况,记住这些都是通过MapView.getMap得到的map来进行设置

        mMapView = (MapView) findViewById(R.id.bmapView);
        map = mMapView.getMap();
        map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
        map.setTrafficEnabled(true); 

具体如下:

protected void onCreate(Bundle savedInstanceState) {
.....

//获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView);
map = mMapView.getMap();
//设置地图类型:普通2D,卫星图 map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//2.是否显示交通路况 map.setTrafficEnabled(true);

  .....
}

1:添加一个标记,

             MarkerOptions options = new MarkerOptions();
             LatLng position = new LatLng(39.963175,116.400244);
             options.position(position);
             BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);
             options.icon(descriptor);
             options.draggable(true);
             map.addOverlay(options)

具体如下:


首先在布局里面添加一个button

<Button  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:onClick="btnAddMarker"  android:text="添加一个机器人"/>

public void btnAddMarker(View view) {//在地图上添加一个图片显示的标记(Marker //用于地图上显示图像(场景:地图上标记用户头像,搜索结果大头钉。)  //添加的步骤,1:准备覆盖物参数,只能通过参数来添加。  //2:通过baidumap 来添加参数,生成真正的覆盖物对象  //3. 设置覆盖物的参数,实现动态的处理:  MarkerOptions options = new MarkerOptions();//覆盖物是与地图绑定的,内部采用仅为度作为位置定义  LatLng position = new LatLng(39.963175,116.400244);options.position(position);//latitue 维度  //longitute 经度  //参数一:维度  //参数二:进度  //所有的覆盖物都是与地图相关的   //!!!Marker 必须设置图片,否则抛出异常  BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);options.icon(descriptor);//通过Options 来添加Marker  //Overlay 代表覆盖物的意思,我们的mark 就是覆盖物  //添加Marker 可以设置是否可以拖拽  options.draggable(true);//添加附加属性:  //通过Bundle 可以传递附加的特定与当前Mark的信息  Bundle info = new Bundle();info.putString("name", "天安门" + System.currentTimeMillis());options.extraInfo(info);//为了实现点击不同的处理和显示;   Marker marker = (Marker)map.addOverlay(options);//marker的特点是地图缩小,机器人还不缩小。 }


2:实现拖拽的时候的回调
=================================================================
Marker 叫做标记标记,Overlay 才叫做覆盖物========================
=================================================================
OverLaylay 是父类,Marker是子类。
map.addOverlay(options)的返回值是一个Overlay


然后通过强转来得到Marker,
然后设置map的拖动获取监听,
这个下面的设置要放到onCreate方法里面去。
     map.setOnMarkerDragListener(this);
回调方法有三个onMarkerDrag,onMarkerDragStart,onMarkerDragEnd,每个里面都有一个markder的参数,可以通过它来获取当前的位置:
        double latitude = marker.getPosition().latitude;
        double longitude = marker.getPosition().longitude;


具体如下:

protected void onCreate(Bundle savedInstanceState) {
.....

//3.设置Marker的拖拽处理 //所有关于地图中的额股改无的师傅支持,都是由BaiduMap类对象来实际完成的 //设置拖拽监听也是由BaiduMap 来完成的。 map.setOnMarkerDragListener(this);
  .....
}


@Override
public void onMarkerDrag(Marker marker) {}@Override
public void onMarkerDragEnd(Marker marker) {double latitude = marker.getPosition().latitude;double longitude = marker.getPosition().longitude;Toast.makeText(this,"latitude "+latitude+" longtitude"+longitude,Toast.LENGTH_LONG).show();
}@Override
public void onMarkerDragStart(Marker marker) {}



3:实现点击的时候的回调。
添加时候添加一个Bundler的参数,这里面用来传递参数信息。
 Bundle info = new Bundle();
        info.putString("name","天安门"+System.currentTimeMillis());
        options.extraInfo(info);//为了实现点击不同的处理和显示;
      
map.setOnMarkerClickListener(this);
回调方法里面的返回值还是false。
@Override
    public boolean onMarkerClick(Marker marker) {
        Bundle extraInfo = marker.getExtraInfo();
        String name ="No Name";
        if(extraInfo!=null){
            if(extraInfo.containsKey("name"))
            name=extraInfo.getString("name");
        }
        Toast.makeText(this,"name is "+name,Toast.LENGTH_LONG).show();
        return false;

    }

public void btnAddMarker(View view) {.....//添加附加属性:  //通过Bundle 可以传递附加的特定与当前Mark的信息  Bundle info = new Bundle();info.putString("name", "天安门" + System.currentTimeMillis());options.extraInfo(info);//为了实现点击不同的处理和显示;
  .....
}
 
 
 
 
protected void onCreate(Bundle savedInstanceState) {
.....
map.setOnMarkerClickListener(this);
.....
}


@Override
public boolean onMarkerClick(Marker marker) {Bundle extraInfo = marker.getExtraInfo();String name ="No Name";if(extraInfo!=null){if(extraInfo.containsKey("name"))name=extraInfo.getString("name");}Toast.makeText(this,"name is "+name,Toast.LENGTH_LONG).show();return false;
}