当前位置:操作系统 > 安卓/Android >>

android 百度地图描绘POI

 首先还是一贯作风,请大家先看一些图例:

      在上一篇介绍了地图显示自己的位置,在这一篇呢,我简单介绍下在地图如何show出来一系列POI(兴趣点)
      首先我们从服务器拉取要标记POI的信息如(lat,lon,Tag等信息)然后就是根据经纬度创建ItemizedOverlay.这个是用于显示一系列的POI.
     代码片段:
  在onLocationChanged调用:
[java] 
/***
     * Location 监听
     * 
     * @param arg0
     */ 
    @Override 
    public void onLocationChanged(Location location) { 
        if (location != null) { 
            // 获取自己的经纬度点 
            GeoPoint geoPoint = new GeoPoint( 
                    (int) (location.getLatitude() * 1e6), 
                    (int) (location.getLongitude() * 1e6)); 
            mMapController.setCenter(geoPoint); 
 
            addItemizedOverlay(geoPoint.getLatitudeE6() / 1e6, 
                    geoPoint.getLongitudeE6() / 1e6);// 定位一系列点 
 
            // addOverLay(geoPoint); 
        } 
 
    } 
[java] 
/***
 * 添加一系列的overlay 范围在5000米内
 * 
 * @param lat
 *            纬度
 * @param lon
 *            经度
 */ 
void addItemizedOverlay(double lat, double lon) { 
    arrayList = new ArrayList<MarkInfo>(); 
    // 获取服务器返回的一系列点 
    ArrayList<MarkInfo> markInfos = Constent.getArrayListPoint(); 
    for (int i = 0; i < markInfos.size(); i++) { 
        MarkInfo markInfo = markInfos.get(i); 
        Double dis = MyUtil.getGeoPointDistance(lat, lon, markInfo.lat, 
                markInfo.lon); 
        if (dis <= distance) 
            arrayList.add(markInfo); 
    } 
 
    Drawable marker = getResources().getDrawable(R.drawable.item); 
    marker.setBounds(0, 0, marker.getIntrinsicWidth(), 
            marker.getIntrinsicHeight()); // 为maker定义位置和边界 
 
    overlays = mMapView.getOverlays(); 
    myItemizedOverlay = new MyItemizedOverlay(marker, this, arrayList); 
 
    myItemizedOverlay.setMapView(mMapView); 
 
    overlays.add(myItemizedOverlay); 
    mPopView = createMarkView();// 获取冒泡view 
    myItemizedOverlay.setmPopView(mPopView); 
    // 将泡泡添加到mMapView上 
    mMapView.addView(mPopView, new MapView.LayoutParams( 
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, null, 
            MapView.LayoutParams.WRAP_CONTENT)); 
    mPopView.setVisibility(View.GONE); 

[java] 
/***
     * 创建点击mark时的弹出泡泡
     */ 
 
    public View createMarkView() { 
        layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        mPopView = layoutInflater.inflate(R.layout.popview, null); 
        TextView textView = (TextView) mPopView.findViewById(R.id.snippet); 
        mPopView.setTag(textView); 
        return mPopView; 
    } 
这里我简单模拟获取服务器的一系列的poi. 并计算自身与这些poi的位置距离,如果小于5000.则显示出来.
在这里说明一下:首先服务器边的处理,不能把所有的poi数据都返回给我们,如果是这样,那么手机就会很耗时会吃不消,不符合移动项目的需求,服务器端:应该对这一系列的poi进行处理,比如根据地区划分开来,如:我传给服务器参数上海浦东,那么只返回给我浦东一系列的poi,这样就解决了这个问题,另外,最好的办法是这段逻辑最好在服务器端,我们请求服务器的参数把距离5000也带过去,返回给我们直接就是要show的poi,这样设计最好了.扯了有点偏了,不过我是初学者,就简单记录下来,如有不妥或着更简单的方法,还请您指示一二,谢谢在先了.
MyItemizedOverlay.java
[java]
package com.jj.baidu; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 
import android.graphics.drawable.Drawable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.TextView; 
import android.widget.Toast; 
 
import com.baidu.mapapi.GeoPoint; 
import com.baidu.mapapi.ItemizedOverlay; 
import com.baidu.mapapi.MapView; 
import com.baidu.mapapi.OverlayItem; 
import com.baidu.mapapi.Projection; 
import com.jj.modle.MarkInfo; 
 
/***
 * 系列覆盖物
 * 
 * @author zhangjia
 * 
 */ 
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { 
 
    private List<OverlayItem> overlayItems; 
    private OverlayItem overlayItem, overlayItem2, overlayItem3, overlayItem4, 
            overlayItem5, overlayItem6; 
 
    private Context mContext; 
    private Drawable marker;// 覆盖物图标 
 
    private View mPopView = null; // 点击mark时弹出的气泡View 
 
    private MapView mapView; 
 
&

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,