带有ItemisedOverlay Android的多个标记
在我的应用程序中,我的web服务提供了多个纬度和经度。此时,我可以使用下面的代码在谷歌地图上只显示一个坐标带有ItemisedOverlay Android的多个标记,android,android-mapview,android-maps,Android,Android Mapview,Android Maps,在我的应用程序中,我的web服务提供了多个纬度和经度。此时,我可以使用下面的代码在谷歌地图上只显示一个坐标 public class CustomMap extends MapActivity { MapView mapView; List<Overlay> mapOverlays; Drawable drawable; Drawable drawable2; CustomItemizedOverlay<CustomOverlayIte
public class CustomMap extends MapActivity {
MapView mapView;
List<Overlay> mapOverlays;
Drawable drawable;
Drawable drawable2;
CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gmap);
//setContentView(LayoutInflater.from(getParent()).inflate(R.layout.main_ou, null));
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapOverlays = mapView.getOverlays();
// second overlay
drawable2 = getResources().getDrawable(R.drawable.red);
itemizedOverlay2 = new CustomItemizedOverlay<CustomOverlayItem>(drawable2, mapView);
GeoPoint point3 = new GeoPoint((int)(-10.224609*1E6),(int)(17.506044*1E6));
CustomOverlayItem overlayItem3 = new CustomOverlayItem(point3, "Title",
"Cliquez here", null);
itemizedOverlay2.addOverlay(overlayItem3);
//itemizedOverlay2.onTap(0);
mapOverlays.add(itemizedOverlay2);
final MapController mc = mapView.getController();
mc.animateTo(point3);
mc.setZoom(16);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
公共类CustomMap扩展了MapActivity{
地图视图;
列出地图覆盖图;
可拉伸;
可拉伸2;
CustomItemizedOverlay ItemizedOverlay 2;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gmap);
//setContentView(LayoutInflater.from(getParent()).flate(R.layout.main_ou,null));
mapView=(mapView)findViewById(R.id.mapView);
mapView.SetBuilTinZoomControl(真);
mapOverlays=mapView.getOverlays();
//二次叠加
drawable2=getResources().getDrawable(R.drawable.red);
itemizedOverlay2=新的自定义ItemizedOverlay(drawable2,mapView);
地质点3=新的地质点((int)-10.224609*1E6),(int)(17.506044*1E6));
CustomOverlayItem overlayItem3=新CustomOverlayItem(第3点,“标题”,
“这里的派系”,空);
itemizedOverlay2.addOverlay(overlayItem3);
//itemizedOverlay2.onTap(0);
添加(itemizedOverlay2);
最终的MapController mc=mapView.getController();
司令官(第3点),;
mc.setZoom(16);
}
@凌驾
受保护的布尔值isRouteDisplayed(){
返回false;
}
}
现在,我想使用数组在地图上动态设置纬度和经度。我正在使用ArrayList val;获取和设置数据。有人能给我一个如何使类动态的提示吗
新更新下面的代码只显示一个标记,但我希望所有标记都显示出来
public class Map extends MapActivity {
private MapController mapControll;
private GeoPoint geoPoint=null;
private MapView mapview;
private MyItemizedOverlay userPicOverlay;
private MyItemizedOverlay nearPicOverlay;
private Drawable userPic,atmPic;
private CustomOverlayItem nearatms[] = new CustomOverlayItem[50];
public static Context context;
double latitude,longitude;
ArrayList<Article> mArticles;
CustomOverlayItem overlayItem3 ;
public ArrayList<Article> articles;
public static ArrayList<Article> article;
EditText search;
DBHelper helper;
GeoPoint point;
MapView mapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aproximite);
context = getApplicationContext();
mapView = (MapView) findViewById(R.id.mapview);
mapView = (MapView) findViewById(R.id.mapview);
search = (EditText)findViewById(R.id.search_box);
helper = DBHelper.getInstance(this);
geoPoint = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));
mapview = (MapView)findViewById(R.id.mapview);
mapControll= mapview.getController();
mapview.setBuiltInZoomControls(true);
mapview.setStreetView(true);
mapControll.setZoom(16);
mapControll.animateTo(geoPoint);
userPic = this.getResources().getDrawable(R.drawable.boutton_log);
userPicOverlay = new MyItemizedOverlay(userPic);
OverlayItem overlayItem = new OverlayItem(geoPoint, "I'm Here!!!", null);
userPicOverlay.addOverlay(overlayItem);
mapview.getOverlays().add(userPicOverlay);
atmPic = this.getResources().getDrawable(R.drawable.boutton_log);
nearPicOverlay = new MyItemizedOverlay(atmPic);
new GetLocationTask().execute();
}
private class GetLocationTask extends AsyncTask<Void, Void, Void> {
@Override
public Void doInBackground(Void... params) {
mArticles = helper.getArticlesList();
return null;
}
@Override
public void onPreExecute() {}
@Override
public void onPostExecute(Void result) {
try {
for (int i = 0; i < mArticles.size(); i++) {
point = new GeoPoint((int)(Double.parseDouble(mArticles.get(i).getLatitude())*1E6),(int)(Double.parseDouble(mArticles.get(i).getLongitude())*1E6));
nearatms[i] = new CustomOverlayItem(point ,"title",
"click here", null);
nearPicOverlay.addOverlay(nearatms[i]);
}
mapview.getOverlays().add(nearPicOverlay);
//Added symbols will be displayed when map is redrawn so force redraw now
mapview.postInvalidate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
公共类映射扩展了MapActivity{
私有映射控制器mapControll;
专用地质点=空;
私有地图视图;
私有MyItemizeOverlay用户PicOverlay;
私有MyItemizedOverlay近PicOverlay;
私有可绘制用户PIC,atmPic;
私人CustomOverlayItem NearATM[]=新CustomOverlayItem[50];
公共静态语境;
双纬度,经度;
ArrayList mArticles;
自定义覆盖项覆盖项3;
公共ArrayList文章;
公共静态ArrayList文章;
编辑文本搜索;
DBHelper;
地质点;
地图视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.aproximite);
context=getApplicationContext();
mapView=(mapView)findViewById(R.id.mapView);
mapView=(mapView)findViewById(R.id.mapView);
search=(EditText)findViewById(R.id.search\u框);
helper=DBHelper.getInstance(this);
地质点=新的地质点((int)(纬度*1E6),(int)(经度*1E6));
mapview=(mapview)findViewById(R.id.mapview);
mapControll=mapview.getController();
mapview.SetBuilTinZoomControl(真);
mapview.setStreetView(真);
mapControll.setZoom(16);
mapControll.animateTo(地质点);
userPic=this.getResources().getDrawable(R.drawable.boutton_log);
userPicOverlay=newmyitemizedoverlay(userPic);
OverlayItem OverlayItem=新的OverlayItem(地理点,“我在这里!!!”,null);
userPicOverlay.addOverlay(overlayItem);
mapview.getOverlays().add(userPicOverlay);
atmPic=this.getResources().getDrawable(R.drawable.boutton_log);
nearPicOverlay=新的MyItemizedOverlay(atmPic);
新建GetLocationTask().execute();
}
私有类GetLocationTask扩展了AsyncTask{
@凌驾
公共Void doInBackground(Void…params){
mArticles=helper.getArticlesList();
返回null;
}
@凌驾
public void onPreExecute(){}
@凌驾
public void onPostExecute(作废结果){
试一试{
对于(int i=0;i
MyItemizeOverlay.class
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> myOverlays ;
public MyItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
myOverlays = new ArrayList<OverlayItem>();
populate();
}
public void addOverlay(OverlayItem overlay){
myOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return myOverlays.get(i);
}
// Removes overlay item i
public void removeItem(int i){
myOverlays.remove(i);
populate();
}
// Returns present number of items in list
@Override
public int size() {
return myOverlays.size();
}
public void addOverlayItem(OverlayItem overlayItem) {
myOverlays.add(overlayItem);
populate();
}
public void addOverlayItem(int lat, int lon, String title) {
try {
GeoPoint point = new GeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, title, null);
addOverlayItem(overlayItem);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
protected boolean onTap(int index) {
// TODO Auto-generated method stub
String title = myOverlays.get(index).getTitle();
System.out.println(index);
return super.onTap(index);
}
}
公共类MyItemizeOverlay扩展了ItemizeOverlay{
私人ArrayList myOverlays;
公共MyItemizedOverlay(可绘制的默认标记){
super(boundCenterBottom(defaultMarker));
myOverlays=新的ArrayList();
填充();
}
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
@凌驾
受保护的OverlayItem createItem(int i){
返回myOverlays.get(i);
}
//删除覆盖项i
公共无效删除项(int i){
删除(i);
填充();
}
//返回列表中的当前项数
@凌驾
公共整数大小(){
返回myOverlays.size();
}
公共void addOverlayItem(OverlayItem OverlayItem){
添加(覆盖项);
填充();
}
public void addOverlayItem(int-lat、int-lon、字符串标题){
试一试{
地质点=新的地质点(纬度、经度);
OverlayItem OverlayItem=新的OverlayItem(点、标题、空);
addOverlayItem(
for(int i = 0 ; i < arraylist.size();i++){
addMarker(mapview,arraylistLat.get(i),arraylistLong.get(i),title.get(i),arraysnippet.get(i));
}
private void addMarker(GoogleMap map, double lat, double lon,
String string, String string2) {
map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
.title(string).snippet(string2));
}