Android 地图视图

发布于 2024-11-17 13:37:56 字数 6602 浏览 1 评论 0原文

请帮助我,我正在开发一个 Xyz 项目,其地图视图可以根据用户选择添加多个叠加层并删除叠加层。

更清楚地说,它根据用户选择过滤覆盖层,,,,

假设显示最喜欢的地方,用户的朋友...

PostLoginServiceHomeBean 是我的 ArrayList,带有 ArrayList NearByFavoritePlacesList 对象

entry.getNearByFavoritePlacesList().get(i) .getGpsLatitude() .trim()

即通过这个我得到了多个纬度长格式服务器...

代码运行 f9 并将多个覆盖添加到我的地图中,并在覆盖点击上显示相应地点的名称和地址。但是如何我可以从我的地图中删除叠加层吗...

我附上代码:请找到下面的代码:

请帮助我...

package com.gogozing.app;

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

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;

import com.gogozing.service.LocateServices;
import com.gogozing.util.Data;
import com.gogozing.util.PostLoginServiceHomeBean;
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 HomeMapActivity extends MapActivity {
    private MapView myMapView;
    private MapController myMapController;
    private List<Overlay> mapOverlays;
    private HomeMapItemizedOverlay itemizedOverlay;
    private Context context;
    private PostLoginServiceHomeBean entry;
    private GeoPoint initGeoPoint;
    private CheckBox peopleCheckBox, friendsCheckBox, favoritesCheckBox;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_map_layout);
        context = this;
        backButton = (Button) findViewById(R.id.HomeMapLeftBackButton);
        eventsBtn = (Button) findViewById(R.id.EventsBtn);
        profileBtn = (Button) findViewById(R.id.ProflieBtn);
        homeBtn = (Button) findViewById(R.id.HomeBtn);
        locateButton = (Button) findViewById(R.id.LocateBtn);
        socializeButton = (Button) findViewById(R.id.SocializeBtn);
        peopleCheckBox = (CheckBox) findViewById(R.id.HomeMapViewPeopleCheckBox);
        favoritesCheckBox = (CheckBox) findViewById(R.id.HomeMapViewFavoritesCheckBox);
        friendsCheckBox = (CheckBox) findViewById(R.id.HomeMapViewFriendsCheckBox);


        homeBtn.setBackgroundResource(R.drawable.home_f);
        myMapView = (MapView) findViewById(R.id.mapviewHome);


        myMapView.setBuiltInZoomControls(true);
        // Set satellite view
        myMapController = myMapView.getController();

        // Get the current location in start-up
        try {

            entry = Data.postLoginServiceHomeMain.get(0);

            favoritesCheckBox
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            if (isChecked) {
                                viewFavoritePlaces();
                            } else
                                removeFavoritePlaces();

                        }
                    });

        } catch (Exception e) {
            Log.e(Data.LOG, e.getMessage(), e);
        }
    }

    void viewFavoritePlaces() {
        for (int i = 0; i < entry.getNearByFavoritePlacesList().size(); i++) {
            double latitude = Double.valueOf(
                    **entry.getNearByFavoritePlacesList().get(i).getGpsLatitude()
                            .trim()**).doubleValue();
            double longitude = Double.valueOf(
                    entry.getNearByFavoritePlacesList().get(i)
                            .getGpsLongitude().trim()).doubleValue();
            Log.v(Data.LOG1, " Latitude " + latitude + " Longitude "
                    + longitude);

            String name = entry.getNearByFavoritePlacesList().get(i)
                    .getMerchantName();
            String address = entry.getNearByFavoritePlacesList().get(i)
                    .getAddress();
            initGeoPoint = new GeoPoint((int) (latitude * 1E6),
                    (int) (longitude * 1E6));

            mapOverlays = myMapView.getOverlays();
            Drawable drawable = this.getResources().getDrawable(
                    R.drawable.map_store_place);

            itemizedOverlay = new HomeMapItemizedOverlay(drawable, this);
            OverlayItem overlayItem = new OverlayItem(initGeoPoint, name,
                    address);

            itemizedOverlay.addOverlay(overlayItem);

            mapOverlays.add(itemizedOverlay);
            myMapController.animateTo(initGeoPoint);
            myMapController.setZoom(15);
        }
    }
    void removeFavoritePlaces() {
        //List<Overlay> mapOverlays = myMapView.getOverlays();

        mapOverlays.remove(itemizedOverlay);

    }



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

    public class HomeMapItemizedOverlay extends ItemizedOverlay<OverlayItem> {
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
        private Context mContext;

        public HomeMapItemizedOverlay(Drawable defaultMarker, Context context) {
            super(boundCenterBottom(defaultMarker));
            mContext = context;
        }

        public void addOverlay(OverlayItem overlay) {
            mOverlays.add(overlay);
            populate();
        }
        public void removeOverlay(OverlayItem overlay)
        {
            mOverlays.remove(overlay);
            populate();
        }

        @Override
        protected OverlayItem createItem(int i) {
            return mOverlays.get(i);
        }

        @Override
        public int size() {
            return mOverlays.size();
        }

        @Override
        protected boolean onTap(int index) {
            OverlayItem item = mOverlays.get(index);
            AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
            dialog.setTitle(item.getTitle());
            dialog.setMessage(item.getSnippet());
            dialog.show();
            return true;
        }
    }

}

Please help me out, I am working on a Project Xyz having the mapView with add multiple overlays and remove overlays as per userChoice.

To be more clear it filters the overlays as per user choice,,,,

Suppose showing favorite places, friends of a user...

PostLoginServiceHomeBean is my ArrayList with an ArrayList NearByFavoritePlacesList object

entry.getNearByFavoritePlacesList().get(i).getGpsLatitude()
.trim()

i.e by this i'm getting the multiple lat long form server...

The code runs f9 and add the multiple overlays to my map and shows name and address of repective place on overlay tap.But how could I remove the overlays form my map...

I am enclosing the code:Please find the code below:

Please help me out....

package com.gogozing.app;

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

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;

import com.gogozing.service.LocateServices;
import com.gogozing.util.Data;
import com.gogozing.util.PostLoginServiceHomeBean;
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 HomeMapActivity extends MapActivity {
    private MapView myMapView;
    private MapController myMapController;
    private List<Overlay> mapOverlays;
    private HomeMapItemizedOverlay itemizedOverlay;
    private Context context;
    private PostLoginServiceHomeBean entry;
    private GeoPoint initGeoPoint;
    private CheckBox peopleCheckBox, friendsCheckBox, favoritesCheckBox;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_map_layout);
        context = this;
        backButton = (Button) findViewById(R.id.HomeMapLeftBackButton);
        eventsBtn = (Button) findViewById(R.id.EventsBtn);
        profileBtn = (Button) findViewById(R.id.ProflieBtn);
        homeBtn = (Button) findViewById(R.id.HomeBtn);
        locateButton = (Button) findViewById(R.id.LocateBtn);
        socializeButton = (Button) findViewById(R.id.SocializeBtn);
        peopleCheckBox = (CheckBox) findViewById(R.id.HomeMapViewPeopleCheckBox);
        favoritesCheckBox = (CheckBox) findViewById(R.id.HomeMapViewFavoritesCheckBox);
        friendsCheckBox = (CheckBox) findViewById(R.id.HomeMapViewFriendsCheckBox);


        homeBtn.setBackgroundResource(R.drawable.home_f);
        myMapView = (MapView) findViewById(R.id.mapviewHome);


        myMapView.setBuiltInZoomControls(true);
        // Set satellite view
        myMapController = myMapView.getController();

        // Get the current location in start-up
        try {

            entry = Data.postLoginServiceHomeMain.get(0);

            favoritesCheckBox
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            if (isChecked) {
                                viewFavoritePlaces();
                            } else
                                removeFavoritePlaces();

                        }
                    });

        } catch (Exception e) {
            Log.e(Data.LOG, e.getMessage(), e);
        }
    }

    void viewFavoritePlaces() {
        for (int i = 0; i < entry.getNearByFavoritePlacesList().size(); i++) {
            double latitude = Double.valueOf(
                    **entry.getNearByFavoritePlacesList().get(i).getGpsLatitude()
                            .trim()**).doubleValue();
            double longitude = Double.valueOf(
                    entry.getNearByFavoritePlacesList().get(i)
                            .getGpsLongitude().trim()).doubleValue();
            Log.v(Data.LOG1, " Latitude " + latitude + " Longitude "
                    + longitude);

            String name = entry.getNearByFavoritePlacesList().get(i)
                    .getMerchantName();
            String address = entry.getNearByFavoritePlacesList().get(i)
                    .getAddress();
            initGeoPoint = new GeoPoint((int) (latitude * 1E6),
                    (int) (longitude * 1E6));

            mapOverlays = myMapView.getOverlays();
            Drawable drawable = this.getResources().getDrawable(
                    R.drawable.map_store_place);

            itemizedOverlay = new HomeMapItemizedOverlay(drawable, this);
            OverlayItem overlayItem = new OverlayItem(initGeoPoint, name,
                    address);

            itemizedOverlay.addOverlay(overlayItem);

            mapOverlays.add(itemizedOverlay);
            myMapController.animateTo(initGeoPoint);
            myMapController.setZoom(15);
        }
    }
    void removeFavoritePlaces() {
        //List<Overlay> mapOverlays = myMapView.getOverlays();

        mapOverlays.remove(itemizedOverlay);

    }



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

    public class HomeMapItemizedOverlay extends ItemizedOverlay<OverlayItem> {
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
        private Context mContext;

        public HomeMapItemizedOverlay(Drawable defaultMarker, Context context) {
            super(boundCenterBottom(defaultMarker));
            mContext = context;
        }

        public void addOverlay(OverlayItem overlay) {
            mOverlays.add(overlay);
            populate();
        }
        public void removeOverlay(OverlayItem overlay)
        {
            mOverlays.remove(overlay);
            populate();
        }

        @Override
        protected OverlayItem createItem(int i) {
            return mOverlays.get(i);
        }

        @Override
        public int size() {
            return mOverlays.size();
        }

        @Override
        protected boolean onTap(int index) {
            OverlayItem item = mOverlays.get(index);
            AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
            dialog.setTitle(item.getTitle());
            dialog.setMessage(item.getSnippet());
            dialog.show();
            return true;
        }
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尸血腥色 2024-11-24 13:37:56

在这里,我给出了我从您的问题中得到的一个解决方案...您需要将 Lat Long 添加到来自服务器的 Overlay 项目中,并将其添加到逐项覆盖中,之后当您想要删除任何具有特定项的逐项覆盖时稍后您也可以检查并从地图叠加层中删除。

Here I am giving one solution what I am getting from your question... You need to add Lat Long into Overlay item which is coming from server and add it to itemized overlay, after that when ever you would like to remove any Itemizedoverlay with specific lat long you can check and remove from map overlay as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文