谷歌地图上添加多个标记V2使用凌空 [英] Add multiple marker on google map v2 using volley

查看:202
本文介绍了谷歌地图上添加多个标记V2使用凌空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道我站在正确的地方要问我的案例研究的帮助,然后在几天我在想是否可以使用存储库凌空数据MapFragment但遗憾的是到现在为止,我不能找到解决办法。使用AsycnTask(如果我错了,请教我)一般MapFragment。为什么我用排枪库,因为全功率GET / POST数据的客户端服务器。可以请你给我一些线索或执行如何解决我的问题。在此先感谢

 公共类MapTestFragment扩展片段{    私有静态最后弦乐TAG = MapTestFragment.class.getSimpleName();
    私有静态最终字符串URL =myurl;    私人列表< MapEntity> mbList =新的ArrayList< MapEntity>();
    私人GoogleMap的GoogleMap的;
    静态最终经纬度位置=新的经纬度(-1.782877,90.381806);
    标记标志;
    私人MapTestAdapter适配器;
    私人的HashMap<标记,MapEntity> mMarkersHashMap;    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
            捆绑savedInstanceState){
        // TODO自动生成方法存根
        查看rootView = inflater.inflate(R.layout.fragment_map,集装箱,FALSE);        getLatLang();
        mMarkersHashMap =新的HashMap<标记,MapEntity>();
        尝试{
            //载入地图
            initilizeMap();
            plotMarkers(mbList);        }赶上(例外五){
            e.printStackTrace();
        }
        返回rootView;
    }    私人无效getLatLang(){
        JsonArrayRequest马preQ =新JsonArrayRequest(URL,
                新Response.Listener< JSONArray>(){                    @覆盖
                    公共无效onResponse(JSONArray响应){
                        // TODO自动生成方法存根
                        Log.d(TAG,response.toString());
                        的for(int i = 0; I< response.length();我++){
                            尝试{
                                JSONObject的OBJ = response.getJSONObject(I)
                                MapEntity MB =新MapEntity();                                mb.setTitle(obj.getString(标题));
                                mb.setLat(((号码)obj.get(纬度))
                                        .doubleValue());
                                mb.setLang(((号码)obj.get(郎))
                                        .doubleValue());
                                mb.setThumbnail(obj.getString(缩略图));                                mbList.add(MB);                            }赶上(例外五){
                                // TODO:处理异常
                                e.printStackTrace();
                            }
                        }
                        adapter.notifyDataSetChanged();
                    }
                },新Response.ErrorListener(){                    @覆盖
                    公共无效onErrorResponse(VolleyError错误){
                        // TODO自动生成方法存根
                        VolleyLog.d(TAG,错误:+ error.getMessage());
                    }
                });
        。AppController.getInstance()addToRequestQueue(MA preQ);    }    私人无效initilizeMap(){
        如果(GoogleMap的== NULL){
            GoogleMap的=((MapFragment)getActivity()。getFragmentManager()
                    .findFragmentById(R.id.map))的GetMap()。            如果(GoogleMap的!= NULL){
                googleMap.setOnMarkerClickListener(新GoogleMap.OnMarkerClickListener(){                    @覆盖
                    公共布尔onMarkerClick(标记标记){
                        // TODO自动生成方法存根
                        marker.showInfoWindow();
                        返回true;
                    }
                });
            }
            其他{
                Toast.makeText(getActivity(),
                        对不起!无法创建地图,Toast.LENGTH_SHORT)
                        。显示();
            }
        }
    }    @覆盖
    公共无效onResume(){
        super.onResume();
        initilizeMap();
    }    私人无效plotMarkers(列表< MapEntity> mbList)
    {
        如果(mbList.size()大于0)
        {
            对于(MapEntity myMarker:mbList2)
            {                //创建自定义图标和其他选项的用户标记
                的MarkerOptions markerOption =新的MarkerOptions()。
                        位置(经纬度新(myMarker.getLat()
                                myMarker.getLang()));
                markerOption.icon(BitmapDesc​​riptorFactory。
                        fromResource(R.drawable.ic_launcher));                标记currentMarker = googleMap.addMarker(markerOption);
                mMarkersHashMap.put(currentMarker,myMarker);                //googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
            }
        }
    }
}
公共类MapTestAdapter延伸BaseAdapter {    私人活动活动;
    私人LayoutInflater吹气;
    私人列表< MapEntity> mapItems;
    私人TextView的tvTitle,tvLat,tvLang;    ImageLoader的ImageLoader的= AppController.getInstance()getImageLoader()。    公共MapTestAdapter(活动活动,
            清单< MapEntity> mapItems){
        超();
        this.activity =活动;
        this.mapItems = mapItems;    }    @覆盖
    公众诠释的getCount(){
        // TODO自动生成方法存根
        返回mapItems.size();
    }    @覆盖
    公共对象的getItem(INT位置){
        // TODO自动生成方法存根
        返回mapItems.get(位置);
    }    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回的位置;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        // TODO自动生成方法存根        如果(吹气== NULL)
            吹气=(LayoutInflater)
                    activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        如果(convertView == NULL)
            convertView = inflater.inflate(R.layout.fragment_map_custom_marker,NULL);
        如果(ImageLoader的== NULL)
            ImageLoader的= AppController.getInstance()getImageLoader()。        tvTitle =(TextView中)convertView.findViewById(R.id.txtTitleMarker);
        tvLat =(TextView中)convertView.findViewById(R.id.txtLatMarker);
        tvLang =(TextView中)convertView.findViewById(R.id.txtLangMarker);        NetworkImageView imageshow =(NetworkImageView)
                convertView.findViewById(R.id.markerthumnail);        最后MapBerau MB = mapItems.get(位置);        tvTitle.setText(mb.getTitle());
        tvLat.setText(将String.valueOf(mb.getLat()));
        tvLang.setText(将String.valueOf(mb.getLang()));
        imageshow.setImageUrl(mb.getThumbnail(),ImageLoader的);        返回convertView;
    }
}


解决方案

要放置多个标记与尝试以下code:

 私人的HashMap<标记,HashMap的<字符串,字符串>> markerHashMap;
markerHashMap =新的HashMap<标记,HashMap的<字符串,字符串>>();//这里,我的数据格式的ArrayList<&HashMap的LT;字符串,字符串>取代;
的for(int i = 0; I<您DATA.size();我++){
                                最终的HashMap<字符串,字符串>属于MapData = YOURDATA.get(ⅰ);
                                如果(mapData.get(纬度)修剪()长度()方式> 0&放大器;&放大器; mapData.get(经度)修剪()长度()方式> 0){
                                    placeMarker(属于MapData);
                                }
                            }

// placeMarker()方法:

 私人无效placeMarker(最终的HashMap<字符串,字符串>属于MapData){
私人标记标记;
        尝试{
            标记= googleMap.addMarker(新的MarkerOptions()图标(
                    BitmapDesc​​riptorFactory.fromBitmap(BitmapFactory.de codeResource(getResources(),R.drawable.YOUR标记图像)))。位置(
                    新经纬度(Double.parseDouble(mapData.get(纬度)),Double.parseDouble(mapData.get(经度)))));
            markerHashMap.put(标记,属于MapData);        }赶上(例外五){
            e.printStackTrace();
        }    }

I know I stand in the right place to ask help about my case study, and then in several day I was thinking about Is it possible to Storing data to MapFragment using Volley Library but unfortunately until now I can't found solution. Generally MapFragment using AsycnTask (if I'm wrong please teach me). why I use Volley Library because full power to get/post data client server. could you kindly give me some clue or implementation how to solve my problem. Thanks in advance

public class MapTestFragment extends Fragment {

    private static final String TAG = MapTestFragment.class.getSimpleName();
    private static final String url = "myurl";

    private List<MapEntity> mbList = new ArrayList<MapEntity>();
    private GoogleMap googleMap;
    static final LatLng Location = new LatLng(-1.782877, 90.381806);
    Marker mark;
    private MapTestAdapter adapter;
    private HashMap<Marker, MapEntity> mMarkersHashMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View rootView = inflater.inflate(R.layout.fragment_map, container, false);

        getLatLang();
        mMarkersHashMap = new HashMap<Marker, MapEntity>();
        try {
            // Loading map
            initilizeMap();
            plotMarkers(mbList);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return rootView;
    }

    private void getLatLang() {
        JsonArrayRequest mapReq = new JsonArrayRequest(url, 
                new Response.Listener<JSONArray>() {

                    @Override
                    public void onResponse(JSONArray response) {
                        // TODO Auto-generated method stub
                        Log.d(TAG, response.toString());
                        for (int i = 0; i < response.length(); i++) {
                            try {
                                JSONObject obj = response.getJSONObject(i);
                                MapEntity mb = new MapEntity();

                                mb.setTitle(obj.getString("title"));
                                mb.setLat(((Number) obj.get("lat"))
                                        .doubleValue());
                                mb.setLang(((Number) obj.get("lang"))
                                        .doubleValue());
                                mb.setThumbnail(obj.getString("thumbnail"));

                                mbList.add(mb);

                            } catch (Exception e) {
                                // TODO: handle exception
                                e.printStackTrace();
                            }
                        }
                        adapter.notifyDataSetChanged();
                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO Auto-generated method stub
                        VolleyLog.d(TAG, "Error: " + error.getMessage());
                    }
                });
        AppController.getInstance().addToRequestQueue(mapReq);

    }

    private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) getActivity().getFragmentManager()
                    .findFragmentById(R.id.map)).getMap();

            if (googleMap != null) {
                googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

                    @Override
                    public boolean onMarkerClick(Marker marker) {
                        // TODO Auto-generated method stub
                        marker.showInfoWindow();
                        return true;
                    }
                });
            }
            else {
                Toast.makeText(getActivity(),
                        "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                        .show();
            }
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        initilizeMap();
    }

    private void plotMarkers(List<MapEntity> mbList)
    {
        if(mbList.size() > 0)
        {
            for (MapEntity myMarker : mbList2)
            {

                // Create user marker with custom icon and other options
                MarkerOptions markerOption = new MarkerOptions().
                        position(new LatLng(myMarker.getLat(), 
                                myMarker.getLang()));
                markerOption.icon(BitmapDescriptorFactory.
                        fromResource(R.drawable.ic_launcher));

                Marker currentMarker = googleMap.addMarker(markerOption);
                mMarkersHashMap.put(currentMarker, myMarker);

                //googleMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter());
            }
        }
    }
}


public class MapTestAdapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater inflater;
    private List<MapEntity> mapItems;
    private TextView tvTitle, tvLat, tvLang;

    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public MapTestAdapter(Activity activity,
            List<MapEntity> mapItems ) {
        super();
        this.activity = activity;
        this.mapItems = mapItems;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mapItems.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return mapItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        if (inflater == null)
            inflater = (LayoutInflater) 
                    activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.fragment_map_custom_marker, null);
        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();

        tvTitle = (TextView) convertView.findViewById(R.id.txtTitleMarker);
        tvLat = (TextView) convertView.findViewById(R.id.txtLatMarker);
        tvLang = (TextView) convertView.findViewById(R.id.txtLangMarker);

        NetworkImageView imageshow = (NetworkImageView) 
                convertView.findViewById(R.id.markerthumnail);

        final MapBerau mb = mapItems.get(position);

        tvTitle.setText(mb.getTitle());
        tvLat.setText(String.valueOf(mb.getLat()));
        tvLang.setText(String.valueOf(mb.getLang()));
        imageshow.setImageUrl(mb.getThumbnail(), imageLoader);

        return convertView;
    }


}

解决方案

To place multiple marker try with below code:

private HashMap<Marker, HashMap<String, String>> markerHashMap;
markerHashMap = new HashMap<Marker, HashMap<String, String>>();

//Here, my data format is ArrayList<HashMap<String, String>>;
for (int i = 0; i < YOUR DATA.size(); i++) {
                                final HashMap<String, String> mapData = YOURDATA.get(i);
                                if (mapData.get("latitude").trim().length() > 0 && mapData.get("longitude").trim().length() > 0) {
                                    placeMarker(mapData);
                                }
                            }

//placeMarker() method:

private void placeMarker(final HashMap<String, String> mapData) {
private Marker marker;
        try {
            marker=googleMap.addMarker(new MarkerOptions().icon(
                    BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.YOUR MARKER IMAGE))).position(
                    new LatLng(Double.parseDouble(mapData.get("latitude")), Double.parseDouble(mapData.get("longitude")))));
            markerHashMap.put(marker, mapData);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

这篇关于谷歌地图上添加多个标记V2使用凌空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆