如何在Android Maps活动中显示特定标记?

史蒂夫·C。

我正在尝试创建一个显示地图的Android应用程序,该地图可以显示每所大学| 该地区/附近的学校。我查看过SO和Google,仅找到有关如何添加标记,添加平铺或显示特定经度/纬度的教程,但是有没有一种方法可以根据特定参数显示特定标记?例如,如果我想显示所有大学/学校的每个标记,我将如何将这些参数传递给MapFragment?我没有尝试过任何东西,因为除了对Web应用程序api的引用(对特定于Android的api没有帮助)之外,我什至没有发现任何暗示该怎么做的内容。

马利克·法汉(Malik Farhan)

希望它可以帮助旅行指南应用程序代码

    public class SearchPlaceType extends Activity
{
    String[] itemTypeName ={
            "airport",
            "atm",
            "bank",
            "bus_station",
            "gas_station",
            "hospital",
            "mosque",
            "park",
            "restaurant",
            "university",
            "food"

        };

    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.search_place_type);

        listView = (ListView)findViewById(R.id.typeList);

        listView.setAdapter(new PlaceTypeAdapter(SearchPlaceType.this, itemTypeName));

        listView.setOnItemClickListener(new OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) 
            {
                Intent intent = new Intent(SearchPlaceType.this,NearByPlaces.class);

                intent.putExtra("positionOfType", (int)position);

                startActivity(intent);
            }
        });
    }

}

比上课告诉附近的地方

public class NearByPlaces extends Activity
{
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

    ListView listView;

    int positionOfType = 0;

    Context context;

    MyLocation myLocation;

    double current_location_lat, current_location_lng;

    public static String latStr = "";
    public static String longStr = "";

    public static LatLng myLatLng = null;

    public static LatLng destinationLatLng = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.near_by_places);

        context = NearByPlaces.this;

        Bundle extras = getIntent().getExtras();

        if(extras!=null)
        {
            positionOfType = extras.getInt("positionOfType", positionOfType);
        }

        listView = (ListView)findViewById(R.id.nearbyList);

        myLocation = new MyLocation(context);

        if (myLocation.isLocationAvailable() && myLocation.getUserLocation() != null)
        {
            current_location_lat =  myLocation.getUserLocation().latitude;

            current_location_lng =  myLocation.getUserLocation().longitude;

            latStr = current_location_lat + "";

            longStr = current_location_lng + "";

            myLatLng = new LatLng(current_location_lat, current_location_lng);

            //url = url_part1 + latStr + "," + longStr + url_part2;

            Log.d("LATITUDE", String.valueOf(current_location_lat));

            Log.d("LONGITUDE", String.valueOf(current_location_lng));


            new PlaceTask(context, positionOfType, latStr, longStr, new onTaskDoneListener() 
            {
                @Override
                public void onTaskDone(JSONObject jsonObject) 
                {
                    if(jsonObject!=null)
                    {
                        try 
                        {
                            JSONObject obj = jsonObject;//new JSONObject(jsonObject);

                            String status = obj.getString("status");

                            if(status.equals("OK"))
                            {
                                JSONArray arr = obj.getJSONArray("results");

                                for(int i = 0; i < arr.length(); i++)
                                {
                                    double lat = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lat");

                                    double lng = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lng"); 

                                    String place_name = arr.getJSONObject(i).getString("name");

                                    String vicinity = arr.getJSONObject(i).getString("vicinity");

                                    HashMap<String, String> map = new HashMap<String,String>();

                                    map.put("placeName", place_name);

                                    map.put("vicinity", vicinity);

                                    map.put("lat", String.valueOf(lat));

                                    map.put("lng", String.valueOf(lng));

                                    list.add(map);
                                }

                                NearByPlaceAdapter adapter = new NearByPlaceAdapter(context, list);

                                listView.setAdapter(adapter);
                            }
                        } 
                        catch (JSONException e) 
                        {
                            e.printStackTrace();
                        }
                    }
                    else
                    {
                        Toast.makeText(context, "Response is Null", Toast.LENGTH_LONG).show();
                    }

                }
            }).execute();

            //showSearchDialog(map);    
        }               
        else
        {
            Toast.makeText(context, "Please Enable Location Services and GPS From your Device", 
                    Toast.LENGTH_LONG).show();
        }       

        listView.setOnItemClickListener(new OnItemClickListener() 
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) 
            {
                HashMap<String, String> map = list.get(position);

                Intent intent = new Intent(context,DirectionActivity3.class);

                destinationLatLng = new LatLng(Double.valueOf(map.get("lat")), Double.valueOf(map.get("lat")));

                startActivity(intent);
            }
        });
    }

}

使用此MapyPane类绘制标记

public class MapyPane extends Activity implements OnMapReadyCallback 
{
    String[] itemTypeName ={
            "airport",
            "atm",
            "bank",
            "bus_station",
            "gas_station",
            "hospital",
            "mosque",
            "park",
            "restaurant",
            "university",
            "food"

        };

    Marker myMarker;

    GMapV2Direction md;

    MyLocation myLocation;

    GoogleMap googleMap;

    double current_location_lat, current_location_lng;

    public static String latStr = "";
    public static String longStr = "";

    Dialog searchDialog;

    ImageView searchDialogIv;
    ImageView searchIcon;

    EditText searchText;

    Context context;

    Integer[] imageId = {
            R.drawable.school_3,
            R.drawable.atm_3,
            R.drawable.school_3,
            R.drawable.police_station_3,
            R.drawable.cng_station_3,//5
            R.drawable.hospital_3,
            R.drawable.school_3,
            R.drawable.hospital_3,//8
            R.drawable.hotel_3,
            R.drawable.cng_station_3,
            R.drawable.hotel_3
    };

    int positionToFind =  0;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        context = MapyPane.this;

        md = new GMapV2Direction();


        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.fragment_map);

        mapFragment.getMapAsync(this);

        googleMap = mapFragment.getMap();//my doctory..

        Bundle extras = getIntent().getExtras();

        if(extras!=null)
        {
            positionToFind = extras.getInt("positionToFind", positionToFind);
        }




        searchText = (EditText)findViewById(R.id.search_text);

        searchDialogIv = (ImageView)findViewById(R.id.search_dialogIv);

        searchDialogIv.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(googleMap==null)
                {
                    Toast.makeText(context, "Unable to load Map", Toast.LENGTH_LONG).show();
                }
                else
                {
                    showSearchDialog(googleMap);
                }
            }
        });

        searchIcon = (ImageView)findViewById(R.id.search_icon);

        searchIcon.setVisibility(View.GONE);

        searchText.setVisibility(View.GONE);

        searchIcon.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //if(sear)
                new PlaceTask(context, searchText.getText().toString(), latStr, longStr, new onTaskDoneListener()
                {
                    @Override
                    public void onTaskDone(JSONObject jsonObject)
                    {
                        //drawMarkersOnMap(jsonObject, googleMap,postponeEnterTransition());
                    }
                }).execute();
            }
        });
    }

    /*public void drawPathBetween(LatLng sourcePosition,LatLng destPosition,GoogleMap mMap)
    {
        Document doc = md.getDocument(sourcePosition, destPosition,
                GMapV2Direction.MODE_DRIVING);

        ArrayList<LatLng> directionPoint = md.getDirection(doc);
        PolylineOptions rectLine = new PolylineOptions().width(3).color(
                Color.RED);

        for (int i = 0; i < directionPoint.size(); i++) 
        {
            rectLine.add(directionPoint.get(i));
        }
        Polyline polylin = mMap.addPolyline(rectLine);
    }*/

    @Override
    public void onMapReady(GoogleMap map) 
    {
        // check if map is created successfully or not
        if (map == null) 
        {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to load maps", Toast.LENGTH_SHORT)
                    .show();
        }
        else
        {           
            myLocation = new MyLocation(MapyPane.this, map);

            if (myLocation.isLocationAvailable() && myLocation.getUserLocation() != null)
            {
                current_location_lat =  myLocation.getUserLocation().latitude;

                current_location_lng =  myLocation.getUserLocation().longitude;

                latStr = current_location_lat + "";

                longStr = current_location_lng + "";

                //url = url_part1 + latStr + "," + longStr + url_part2;

                Log.d("LATITUDE", String.valueOf(current_location_lat));

                Log.d("LONGITUDE", String.valueOf(current_location_lng));

                // Showing Current Location

                map.setMyLocationEnabled(true);


                // Move the camera instantly to hamburg with a zoom of 15.
                map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(current_location_lat, current_location_lng), 15));

                // Zoom in, animating the camera.
                map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);



                // Moving Camera to a Location with animation

                /*CameraPosition cameraPosition = new CameraPosition.Builder().target(
                        new LatLng(current_location_lat, current_location_lng)).zoom(12).build();

                //CameraPosition cameraPosition = new CameraPosition.Builder().target(
                //new LatLng( -33.8650, 151.2094)).zoom(12).build();

                map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));*/



                MarkerOptions markerOptions = new MarkerOptions().title("YourLocation").position(new LatLng(current_location_lat, current_location_lng)).icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.gas_station));//gas_station


                myMarker = map.addMarker(markerOptions);


                new PlaceTask(context, positionToFind, latStr, longStr, new onTaskDoneListener() {

                    @Override
                    public void onTaskDone(JSONObject jsonObject) 
                    {

                    }
                });

                //showSearchDialog(map);    
            }               
            else
            {
                Toast.makeText(MapyPane.this, "Please Enable Location Services and GPS From your Device", 
                        Toast.LENGTH_LONG).show();
            }           
        }

       /* LatLng sydney = new LatLng(-33.867, 151.206);

        map.setMyLocationEnabled(true);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 13));

        map.addMarker(new MarkerOptions()
                .title("Sydney")
                .snippet("The most populous city in Australia.")
                .position(sydney));*/


        /*map.moveCamera(CameraUpdateFactory.newLatLngZoom(
                new LatLng(41.889, -87.622), 16));

        // You can customize the marker image using images bundled with
        // your app, or dynamically generated bitmaps.
        map.addMarker(new MarkerOptions()
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
                .anchor(0.0f, 1.0f) // Anchors the marker on the bottom left
                .position(new LatLng(41.889, -87.622)));*/
    }

    private void drawMarkersOnMap(JSONObject jsonObject,final GoogleMap googleMap,int posi)
    {
        if(jsonObject!=null)
        {
            googleMap.clear();

            try 
            {
                JSONObject obj = jsonObject;//new JSONObject(jsonObject);

                String status = obj.getString("status");

                if(status.equals("OK"))
                {
                    JSONArray arr = obj.getJSONArray("results");

                    for(int i = 0; i < arr.length(); i++)
                    {
                        double lat = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lat");

                        double lng = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").getDouble("lng"); 

                        String food_name = arr.getJSONObject(i).getString("name");

                        String vicinity = arr.getJSONObject(i).getString("vicinity");

                        MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lng)).icon(BitmapDescriptorFactory
                                .fromResource( imageId[posi]));// R.drawable.ic_launcher));//gas_station


                        marker.title(food_name);

                        marker.snippet(vicinity);

                        final Marker testMarker = googleMap.addMarker(marker);

                        googleMap.setOnMarkerClickListener(new OnMarkerClickListener()
                        {
                            @Override
                            public boolean onMarkerClick(Marker markker)
                            {
                                if(markker.equals(testMarker))
                                {
                                    //drawPathBetween(myMarker.getPosition(), markker.getPosition(), googleMap);
                                }
                                else
                                {

                                }
                                return false;
                            }
                        });
                    }
                }
            } 
            catch (JSONException e) 
            {
                e.printStackTrace();
            }
        }
    }

    private void showSearchDialog(final GoogleMap map) 
    {
        searchDialog = new Dialog(MapyPane.this);

        searchDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        searchDialog.setContentView(R.layout.menu_item_custom_dialog);      

        searchDialog.setCanceledOnTouchOutside(false);

        ListView list;
        final String[] web = {
                "airport",
                "atm",
                "bank",
                "bus_station",
                "gas_station",  //department_store  ya home_goods_store
                "hospital",  //health
                "mosque",//7
                "park",
                "restaurant",//instead of hotels
                "university",
                "Food"
        } ;
        Integer[] imageId = {
                R.drawable.school_3,
                R.drawable.atm_3,
                R.drawable.school_3,
                R.drawable.police_station_3,
                R.drawable.cng_station_3,//5
                R.drawable.hospital_3,
                R.drawable.school_3,
                R.drawable.hospital_3,//8
                R.drawable.hotel_3,
                R.drawable.cng_station_3,
                R.drawable.hotel_3
        };

        CustomList adapter = new
                CustomList(MapyPane.this, web, imageId);

        list = (ListView) searchDialog.findViewById(R.id.list_location);
        list.setAdapter(adapter);

        ///list.setSelector(R.drawable.list_item_selector);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    final int position, long id) {
                //Toast.makeText(MapyPane.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();

                ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

                if (mWifi.isConnected())
                {
                    if(latStr.equals(""))
                    {
                        Toast.makeText(MapyPane.this, " please enable your gps location ", Toast.LENGTH_SHORT).show();
                    }

                    else
                    {
                        new PlaceTask(MapyPane.this, position, latStr, longStr, new onTaskDoneListener()
                        {
                            @Override
                            public void onTaskDone(JSONObject jsonObject)
                            {
                                drawMarkersOnMap(jsonObject, map,position);
                            }
                        }).execute();

                        searchDialog.dismiss();
                    }       
                }
                else
                {
                    Toast.makeText(MapyPane.this, "Internet is not available", Toast.LENGTH_SHORT).show();
                }
            }
        });

        searchDialog.show();

    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中从Google Map删除特定标记

来自分类Dev

如何从GMS中删除特定标记?

来自分类Dev

如何从GMS中删除特定标记?

来自分类Dev

如何从Android中的活动移至特定标签

来自分类Dev

如何从 GoogleMapsAPI 中的静态数组中删除特定标记

来自分类Dev

如何在android google maps活动中显示两点之间的路径?

来自分类Dev

如何在Android中的地图活动中放大标记

来自分类Dev

如何在传单MarkerClusterGroup中打开特定标记的弹出窗口?

来自分类Dev

p如何在 XML 中的特定标记之间替换 \n 换行符

来自分类Dev

Android Google Maps,如何在标记中添加链接

来自分类Dev

如何在特定标记后面分割字符串

来自分类Dev

如何在 android 应用程序中的活动中显示特定于语言的语法突出显示的代码?

来自分类Dev

如何从特定标记中选择数据

来自分类Dev

如何仅为特定标记设置InfoWindowAdapter

来自分类Dev

如何在Android中的Google Maps上显示InfoWindow for Circle

来自分类Dev

如何在WordPress中添加活动类以锚定标签

来自分类Dev

如何使用.bat文件从PATH环境变量中删除特定标记?

来自分类Dev

如何让班级中的每个测试都自动标记有特定标签

来自分类Dev

如何基于特定标记在数组中拆分字符串

来自分类Dev

如何修改xml文件中的内容(特定标记内除外)

来自分类Dev

如何在android中启动新活动

来自分类Dev

如何在Android活动中停止线程

来自分类Dev

如何在Android的活动中创建通知?

来自分类Dev

如何在Android中退出活动

来自分类Dev

如何在Android中的特定按钮上方显示弹出窗口

来自分类Dev

如何在Android中显示特定数量的通知

来自分类Dev

如何在Android应用中显示特定用户的推文

来自分类Dev

如何在Android CalendarView中显示特定月份?

来自分类Dev

如何在道路上保持标记?Google Maps Android

Related 相关文章

  1. 1

    如何在Android中从Google Map删除特定标记

  2. 2

    如何从GMS中删除特定标记?

  3. 3

    如何从GMS中删除特定标记?

  4. 4

    如何从Android中的活动移至特定标签

  5. 5

    如何从 GoogleMapsAPI 中的静态数组中删除特定标记

  6. 6

    如何在android google maps活动中显示两点之间的路径?

  7. 7

    如何在Android中的地图活动中放大标记

  8. 8

    如何在传单MarkerClusterGroup中打开特定标记的弹出窗口?

  9. 9

    p如何在 XML 中的特定标记之间替换 \n 换行符

  10. 10

    Android Google Maps,如何在标记中添加链接

  11. 11

    如何在特定标记后面分割字符串

  12. 12

    如何在 android 应用程序中的活动中显示特定于语言的语法突出显示的代码?

  13. 13

    如何从特定标记中选择数据

  14. 14

    如何仅为特定标记设置InfoWindowAdapter

  15. 15

    如何在Android中的Google Maps上显示InfoWindow for Circle

  16. 16

    如何在WordPress中添加活动类以锚定标签

  17. 17

    如何使用.bat文件从PATH环境变量中删除特定标记?

  18. 18

    如何让班级中的每个测试都自动标记有特定标签

  19. 19

    如何基于特定标记在数组中拆分字符串

  20. 20

    如何修改xml文件中的内容(特定标记内除外)

  21. 21

    如何在android中启动新活动

  22. 22

    如何在Android活动中停止线程

  23. 23

    如何在Android的活动中创建通知?

  24. 24

    如何在Android中退出活动

  25. 25

    如何在Android中的特定按钮上方显示弹出窗口

  26. 26

    如何在Android中显示特定数量的通知

  27. 27

    如何在Android应用中显示特定用户的推文

  28. 28

    如何在Android CalendarView中显示特定月份?

  29. 29

    如何在道路上保持标记?Google Maps Android

热门标签

归档