百度地图添加标记以及标记的点击

废话少说,直接上代码:
MapActivity.java

package com.wissea.trs.activity;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Point;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.wissea.trs.R;
import com.wissea.trs.model.CameraLocation;

public class MapActivity extends BaseActivity {

    private MapView mMapView;
    private BaiduMap mBaiduMap;
    private BitmapDescriptor mMarker;
    private RelativeLayout rl_camera_description;
    private Context mContext;

    private TextView tv_name;
    private TextView tv_description;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
        // 注意该方法要再setContentView方法之前实现
        mContext = getApplicationContext();
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_map);

        // 模拟数据
        List<CameraLocation> cameraLocations = new ArrayList<CameraLocation>();
        cameraLocations.add(new CameraLocation(34.242652,108.971171,R.drawable.logo,"英伦贵族东旅馆", "距离209米","我是说明1"));
        cameraLocations.add(new CameraLocation(34.242952,108.972171,R.drawable.logo,"英伦贵族西旅馆", "距离209米","我是说明2"));
        cameraLocations.add(new CameraLocation(34.242852,108.973171,R.drawable.logo,"英伦贵族南旅馆", "距离209米","我是说明3"));
        cameraLocations.add(new CameraLocation(34.242152,108.971971,R.drawable.logo,"英伦贵族北旅馆", "距离209米","我是说明4"));

        initView();

        initMarker(cameraLocations);

    }

    /**
     * 初始化控件
     */
    private void initView() {
        // 初始化ActionBar
        setBackable(true);
        setTitle("拓扑图");

        // 获取地图控件引用
        mMapView = (MapView) findViewById(R.id.mv_map);
        mBaiduMap = mMapView.getMap();

        // 底部说明
        rl_camera_description = (RelativeLayout) findViewById(R.id.rl_camera_description);

        tv_name = (TextView) findViewById(R.id.tv_name);
        tv_description = (TextView) findViewById(R.id.tv_description);
    }

    /**
     * 点击地图上的标记
     * @param cameraLocations
     */
    private void initMarker(List<CameraLocation> cameraLocations) {
        // TODO Auto-generated method stub
        mMarker = BitmapDescriptorFactory.fromResource(R.drawable.marker);
        mBaiduMap.clear();
        LatLng latLng = null;
        Marker marker = null;
        OverlayOptions options;
        for(CameraLocation cameraLocation : cameraLocations) {
            // 经纬度
            latLng = new LatLng(cameraLocation.getLatitude(), cameraLocation.getLongtitude());

            // 图标
            options = new MarkerOptions().position(latLng).icon(mMarker).zIndex(5);
            marker = (Marker) mBaiduMap.addOverlay(options);
            Bundle bundle = new Bundle();
            bundle.putSerializable("cameraLocation", cameraLocation);
            marker.setExtraInfo(bundle);
        }

        // 定义地图状态(精确到50米)
        MapStatus mMapStatus = new MapStatus.Builder().target(latLng).zoom(18).build();
        // 定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        // 移到第四个位置
        mBaiduMap.setMapStatus(mapStatusUpdate);

        // 点击地图上的标记
        mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {

            @Override
            public boolean onMarkerClick(Marker marker) {
                Bundle bundle = marker.getExtraInfo();
                CameraLocation cameraLocation = (CameraLocation) bundle.getSerializable("cameraLocation");
                //rl_camera_description.findViewById(id)查找该相对布局里的控件,使用cameraLocation这个bean的信息为控件设置内容
                tv_name.setText(cameraLocation.getName());
                tv_description.setText(cameraLocation.getDescription());

                InfoWindow infoWindow;
                TextView textView = new TextView(mContext);
                textView.setBackgroundResource(R.drawable.popup);
                textView.setPadding(30, 20, 30, 50);
                textView.setText("haha");
                textView.setTextColor(getResources().getColor(R.color.black));

                final LatLng latLng = marker.getPosition();
                Point point = mBaiduMap.getProjection().toScreenLocation(latLng);
                point.y -= 160;
                LatLng latLng2 = mBaiduMap.getProjection().fromScreenLocation(point);
                infoWindow = new InfoWindow(textView, latLng2, 0);
                // 以上可以替换为:infoWindow = new InfoWindow(textView, latLng, -160);

                mBaiduMap.showInfoWindow(infoWindow);

                rl_camera_description.setVisibility(View.VISIBLE);
                return true;
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
}

xml文件activity_map.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/mv_map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

    <!-- 底部说明 -->
    <RelativeLayout
        android:id="@+id/rl_camera_description"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:background="#cc4e5a6b"
        android:visibility="gone"
        android:layout_alignParentBottom="true" >

        <!-- 图片 -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_margin="12dp"
            android:background="@drawable/shape_image_frame"
            android:scaleType="fitXY"
            android:src="@drawable/camera" />

        <!-- 图片下面的说明 -->
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true" >

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_marginLeft="20dp"
                android:gravity="center_vertical"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/tv_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="name"
                    android:textColor="@color/white" />

                <TextView
                    android:id="@+id/tv_description"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="description"
                    android:textColor="@color/white" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="20dp"
                android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="aa"
                    android:textColor="@color/white" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="bb"
                    android:textColor="@color/white" />
            </LinearLayout>
        </RelativeLayout>
    </RelativeLayout>

</RelativeLayout>

CameraLocation.java

package com.wissea.trs.model;

import java.io.Serializable;

public class CameraLocation implements Serializable {
    private static final long serialVersionUID = -7272905486020904055L;
    private double latitude;
    private double longtitude;
    private int imageId;
    private String name;
    private String distance;
    private String description;

    public CameraLocation(){}

    public CameraLocation(double latitude, double longtitude, int imageId,
            String name, String distance, String description) {
        super();
        this.latitude = latitude;
        this.longtitude = longtitude;
        this.imageId = imageId;
        this.name = name;
        this.distance = distance;
        this.description = description;
    }



    /**
     * @return the latitude
     */
    public double getLatitude() {
        return latitude;
    }

    /**
     * @param latitude
     *            the latitude to set
     */
    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    /**
     * @return the longtitude
     */
    public double getLongtitude() {
        return longtitude;
    }

    /**
     * @param longtitude
     *            the longtitude to set
     */
    public void setLongtitude(double longtitude) {
        this.longtitude = longtitude;
    }

    /**
     * @return the imageId
     */
    public int getImageId() {
        return imageId;
    }

    /**
     * @param imageId
     *            the imageId to set
     */
    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name
     *            the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the distance
     */
    public String getDistance() {
        return distance;
    }

    /**
     * @param distance
     *            the distance to set
     */
    public void setDistance(String distance) {
        this.distance = distance;
    }

    /**
     * @return the description
     */
    public String getDescription() {
        return description;
    }

    /**
     * @param description
     *            the description to set
     */
    public void setDescription(String description) {
        this.description = description;
    }
}

底部的说明背景色:shape_image_frame.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <stroke
        android:width="2dp"
        android:color="#AAFFFFFF" />

    <padding
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp"
        android:top="2dp" />

</shape>

运行效果:
这里写图片描述

百度地图添加普通标记点,通常需要使用百度地图API提供的功能。以下是基本的步骤: 1. 准备工作:首先确保已经在网页中引入了百度地图JavaScript API的库,并且注册获取到了API密钥(key)。 2. 创建地图实例:通过`BMap.Map`类创建一个地图实例,指定一个容器(容器一般是DOM元素,比如一个div)来承载地图。 3. 初始化标记点:使用`BMap.Marker`类创建一个标记点实例。在构造函数中,你可以指定标记点的位置,通常是通过经纬度来指定。 4. 将标记添加到地图:使用`map.addOverlay(overlay)`方法将创建的标记点实例添加到地图实例上。这里的`overlay`是覆盖物,即标记点。 5. 设置标记点的图标:可以通过`marker.setLabel`方法为标记点设置文本标签,或者通过`marker.setIcon`方法自定义标记点的图标样式。 示例代码如下: ```javascript // 创建地图实例 var map = new BMap.Map("container"); // 初始化用户中心点 map.centerAndZoom(new BMap.Point(经度, 纬度), 15); // 创建标记点实例 var marker = new BMap.Marker(new BMap.Point(经度, 纬度)); // 将标记添加到地图上 map.addOverlay(marker); // 设置标记点的文本标签 marker.setLabel({ position: new BMap.Point(经度, 纬度), offset: new BMap.Size(-10, 15), text: '标签文字' }); // 设置标记点的图标样式 marker.setIcon("图片URL"); ``` 请将`container`替换为实际的容器ID,将`经度`和`纬度`替换为实际的位置坐标,将`图片URL`替换为想要显示的图标图片地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值