`
wiseideal
  • 浏览: 449008 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ItemizedOverlay的初级使用

阅读更多
实现一个ItemizedOverlay其实很简单,首先一个装载item的list,用于读取并绘制每一个item,创建一个添加方法 add 剩下的事情留给框架处理吧

引用

package map.chaos.com;

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

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class MyMap extends MapActivity {
MapView mapview;
MapController controller;
GeoPoint[] g=new GeoPoint[5];
LocationManager locationManager;
Drawable[] drawables;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
drawables=new Drawable[]{getResources().getDrawable(R.drawable.home),
getResources().getDrawable(R.drawable.tg001),getResources().getDrawable(R.drawable.tg002),
getResources().getDrawable(R.drawable.tg003),getResources().getDrawable(R.drawable.tg004)};
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//设置mapview
mapview = (MapView) findViewById(R.id.mapview);
mapview.setTraffic(false);
mapview.setSatellite(false);
mapview.setStreetView(false);
mapview.setEnabled(true);
mapview.setClickable(true);
mapview.setBuiltInZoomControls(true);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER,
60000, 0, new LocationListener() {

public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
// controller.animateTo(locationToGeopoint(location));
}

public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub

}

public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub

}
});
Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
List<Overlay> list = mapview.getOverlays();
//初始化GeoPoint
g[0]=locationToGeopoint(location);
g[1]=new GeoPoint(30523109,114389224);
g[2]=new GeoPoint(30623059,115389344);
//添加了3个MarkMyMap对象 显示3个不同的图标
MarkMyMap home = new MarkMyMap(drawables[0], this);
OverlayItem item_home = new OverlayItem(locationToGeopoint(location),"IAMHOME", "Home");
home.addOverlay(item_home);
MarkMyMap tg1=new MarkMyMap(drawables[1],this);
OverlayItem item_tg1=new OverlayItem(g[1],"tg1","tg1");
tg1.addOverlay(item_tg1);
MarkMyMap tg2=new MarkMyMap(drawables[2],this);
OverlayItem item_tg2=new OverlayItem(g[2],"tg2","tg2");
tg2.addOverlay(item_tg2);
// 添加到Overlay的list当中
list.add(home);
list.add(tg1);
list.add(tg2);
controller = mapview.getController();
controller.setZoom(17);
controller.animateTo(locationToGeopoint(location));
}

// location转GeoPoint
public GeoPoint locationToGeopoint(Location location) {
// TODO Auto-generated method stub
int gX = (int) (location.getLatitude() * 1E6);
int gY = (int) (location.getLongitude() * 1E6);
GeoPoint gp = new GeoPoint(gX, gY);
return gp;
}

@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}

// 计算亮点距离
public String getDistance(GeoPoint gp){
float latitude_A=(float) (g[0].getLatitudeE6()/1E6);
float longitude_A=(float) (g[0].getLongitudeE6()/1E6);
float latitude_B=(float) (gp.getLatitudeE6()/1E6);
float longitude_B=(float) (gp.getLongitudeE6()/1E6);
float a=latitude_A-latitude_B;
float b=longitude_A-longitude_B;
float distance=(float) (2*6378.137*Math.asin(
Math.sin(a/2)*Math.sin(a/2)+Math.cos(latitude_A)*Math.cos(latitude_B)*Math.sin(b/2)*Math.sin(b/2)
));
return "与我相距 "+Math.round(distance*1000)+" 米";
}

// 处理地图标记
class MarkMyMap extends ItemizedOverlay<OverlayItem> {
ArrayList<OverlayItem> itemsOverlay = new ArrayList<OverlayItem>();
Context context;
GeoPoint tg;

public MarkMyMap(Drawable defaultMarker) {
//这里一定要加上boundCenterBottom 否则图片根本显示不出来 而不是显示效果不佳
super(boundCenterBottom(defaultMarker));
// TODO Auto-generated constructor stub
}

public MarkMyMap(Drawable defaultMaker, Context context) {
this(defaultMaker);//调用上一个构造器
this.context = context;
}

@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
//GeoPoint和location转换使用1E6 精度不会丢失很严重
System.out.println("itemsOverlay.get(i).getMarker(i)====>"+ itemsOverlay.get(i).getPoint());
return itemsOverlay.get(i);
}

@Override
public int size() {
// TODO Auto-generated method stub
return itemsOverlay.size();
}
//mapview里使用
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
//如果同一个对象 添加了很多item 这里可以显示被点击的item ID
System.out.println("index is "+index);
Toast.makeText(context, getDistance(tg), Toast.LENGTH_SHORT).show();
return true;
}

public void addOverlay(OverlayItem item) {
itemsOverlay.add(item);
System.out.println("itemsOverlay.size()=====" + itemsOverlay.size());
tg=item.getPoint();
this.populate();//通知overlay添加数据
}

}

}
分享到:
评论

相关推荐

    ItemizedOverlay

    对于大量覆盖物,考虑使用分页加载或者懒加载策略,避免一次性加载所有数据导致性能问题。 综上所述,`ItemizedOverlay`是Android地图应用开发中的一个重要工具,它使得我们可以自由地在地图上添加个性化、交互式...

    使用ItemizedOverlay在mapview上创建浮动按钮

    总的来说,使用`ItemizedOverlay`创建浮动按钮是Android地图应用中常用的技术,它允许开发者为地图添加丰富的交互性,提升用户的使用体验。通过自定义`ItemizedOverlay`子类和`OverlayItem`,我们可以自由设计按钮...

    Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay)

    `ItemizedOverlay`默认使用`Drawable`作为覆盖物的图标,但你也可以根据需求自定义覆盖物的样式和行为。比如,你可以创建一个自定义的`View`,并在`draw()`方法中画出这个`View`。 6. **更新覆盖物**: 如果需要...

    Android高级编程.pdf

    7.7.8 ItemizedOverlay和Overlayltem简介 7.7.9 将View固定到地图和地图的某个位置上 7.8 对Earthquake示例添加地图功能 7.9 小结 第8章 后台工作 8.1 服务简介 8.1.1 创建和控制服务 8.1.2 将活动和服务绑定 8.2 ...

    高德地图自定义点聚合图片

    1. 创建一个自定义的`Overlay`类,继承自`ItemizedOverlay&lt;OverlayItem&gt;`,在这个类中你需要重写`draw()`方法,绘制覆盖物。 2. 在`draw()`方法内,根据每个`OverlayItem`的位置,使用`Canvas`绘制自定义的图标。 3....

    13 地图应用1

    例如,`Interface Summary`中提到的`ItemizedOverlay.OnFocusChangeListener`接口用于监听Item焦点的变化,而`Overlay.Snappable`接口定义了可以吸附(snap)的覆盖物,这在用户缩放地图时尤其有用。 总的来说,...

    android 百度地图demo 在地图上划出轨迹

    百度地图作为国内知名的地理信息服务提供商之一,提供了丰富的API供开发者使用。其中,绘制轨迹的功能对于物流追踪、运动轨迹记录等应用场景尤为重要。 ### 二、关键概念与组件 #### 1. Baidu Map SDK for Android...

    android地图开发

    - `ItemizedOverlay`:如果你的图层包含可点击的标注,可以使用`ItemizedOverlay`,它为每个标注提供了单独的点击事件处理。 3. **Google Maps API的其他功能**: - 定位:使用`LocationClient`或`...

    android百度地图注释版

    "android百度地图注释版"是一个专为初学者设计的代码示例,包含了详细的注释,帮助理解如何使用百度地图SDK在Android应用中实现各种功能。 1. **初始化地图(BDMap_0_init_defaultLocation)** 这个部分主要涉及...

    Android高级编程--源代码

    7.7.8 ItemizedOverlay和OverlayItem简介 239 7.7.9 将View固定到地图和地图的某个位置上 240 7.8 对Earthquake示例添加地图功能 241 7.9 小结 247 第8章 后台工作 249 8.1 服务简介 250 8.1.1 创建和控制服务...

    Android客户端百度地图的基本功能实现

    这篇博客文章“Android客户端百度地图的基本功能实现”深入浅出地讲解了如何在Android应用中使用百度地图API来创建一个基础的地图应用。以下是根据博客内容和标签整理的详细知识点: 1. **百度地图SDK安装与配置**...

    android调用百度地图的覆盖层

    CustomItemizedOverlay itemizedOverlay = new CustomItemizedOverlay(defaultMarker, mapView); itemizedOverlay.addOverlay(overlayItem); mapView.getOverlays().add(itemizedOverlay); mapView.invalidate(); //...

    百度地图移动版SDK开发指南

    - 自定义覆盖物可通过继承`ItemizedOverlay`并重写相关方法来实现。 **搜索服务示例**: - 初始化`MKSearch`对象,然后调用`poiSearchNearBy`方法进行周边搜索。 - 实现回调方法`onGetPoiResult`来处理搜索结果。 ...

    Android地图和定位学习总结.pdf

    - `ItemizedOverlay`是覆盖物的基类,可以添加自定义图标或标记到地图上。 - `OverlayItem`代表地图上单个覆盖物,包含地理坐标和显示信息。 - `Projection`接口提供了将屏幕坐标转换为地理坐标的方法。 此外,`...

    gmap气球源码

    使用这个库,开发者可以: 1. 创建一个继承自`MapViewBalloonAdapter`的自定义适配器,以定义气球的外观和行为。 2. 在地图上添加overlay,每个overlay对应地图上的一个点,并通过adapter关联气球信息。 3. 调整气球...

    Android系统手机基站信息库开发与设计.pdf

    - **基站定位**:通过集成百度地图API,获取基站的经纬度信息,将这些信息转换为GeoPoint对象,并覆盖ItemizedOverlay类的方法,将基站位置以图标的形式绘制在地图上。 - **基站距离计算**:利用Android系统的...

    某培训机构 Google Map 培训代码总结

    这篇培训资料主要讲解了如何在Android应用中集成和使用Google Map API。 首先,我们来看地图定位布局文件。这里使用了一个`LinearLayout`作为根布局,并设置为垂直方向。关键在于`MapView`组件,它是Google Maps ...

    百度地图信息推送报告

    (五)自定义图层ItemizedOverlay和在地图上增加标注 10 (六)增加点击标注弹出气泡(显示标注信息)的功能 12 (七)增加POI搜索功能 15 三、百度地图的信息推送 19 (一)PC服务端 19 (二) Android手机客户端 22 四...

Global site tag (gtag.js) - Google Analytics