【问题标题】:How to add markers on google map form ArrayList in Android如何从 Android 中的 ArrayList 在谷歌地图上添加标记
【发布时间】:2015-03-26 09:25:02
【问题描述】:

首先抱歉我的英语不好,我正在研究谷歌地图,我是第一次在谷歌地图上工作,我的问题是我从服务器端获取一个数组,在这个数组中我得到了城市,名称,纬度,经度等。 我的数组如下:

city,name,21.22,22.33,city,name,24.44,25.55,city,name,32.222,38.88

我想代表我的纬度、经度将标记放在谷歌地图上,正如您在我的数组上看到的那样,在我的第一个索引上,我得到城市、名称和纬度、经度,然后是第二个位置纬度、经度,城市和名称等。请帮助我如何在谷歌地图上实现标记?将不胜感激。

我的地图活动:

public class MapActivity extends ActionBarActivity {

// Google Map
private GoogleMap googleMap;
double stringLatitude;
double stringLongitude;

String frenchiseLocationArray;
String ServiceCentreLocationArray;

private ArrayList<String> AssociatedArray = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.googlemap);

    setupActionBarBackPressed();

    frenchiseLocationArray = getIntent().getExtras().getString(
            "frenchiseLocationArray");
    ServiceCentreLocationArray = getIntent().getExtras().getString(
            "ServiceCentreLocationArray");

    Toast.makeText(
            getApplicationContext(),
            "frenchise " + frenchiseLocationArray + "\n"
                    + " service centre " + ServiceCentreLocationArray,
            Toast.LENGTH_SHORT).show();

    // separate the strings by comma
    StringTokenizer st = new StringTokenizer(frenchiseLocationArray, ",");

    /* List myArray = new ArrayList<String>(); */
    String token = null;

    while (st.hasMoreTokens()) {

        token = st.nextToken();
        AssociatedArray.add(token);

    }
    Log.d("map", "frenchise location array = " + AssociatedArray);
    if (AssociatedArray != null) {

        if (AssociatedArray.size() > 0) {

            for (int a = 0; a < AssociatedArray.size(); a = a + 2) {

            //  Log.d("map", "frenchise location array = " + AssociatedArray);

            }

        }

    }

    try {

        // check if GPS enabled
        GPSTracker gpsTracker = new GPSTracker(this);

        if (gpsTracker.canGetLocation()) {
            stringLatitude = Double.valueOf(gpsTracker.latitude);

            stringLongitude = Double.valueOf(gpsTracker.longitude);

        } else {

            gpsTracker.showSettingsAlert();
        }
        // Loading map
        initilizeMap();


        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);

        // Showing / hiding your current location
        googleMap.setMyLocationEnabled(true);

        // Enable / Disable zooming controls
        googleMap.getUiSettings().setZoomControlsEnabled(false);

        // Enable / Disable my location button
        googleMap.getUiSettings().setMyLocationButtonEnabled(true);

        // Enable / Disable Compass icon
        googleMap.getUiSettings().setCompassEnabled(true);

        // Enable / Disable Rotate gesture
        googleMap.getUiSettings().setRotateGesturesEnabled(true);

        // Enable / Disable zooming functionality
        googleMap.getUiSettings().setZoomGesturesEnabled(true);


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

}

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

/**
 * function to load map If map is not created it will create it for you
 * */
private void initilizeMap() {
    if (googleMap == null) {
        googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                R.id.map)).getMap();

        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

/*
 * creating random postion around a location for testing purpose only
 */
private double[] createRandLocation(double latitude, double longitude) {

    return new double[] { latitude + ((Math.random() - 0.5) / 500),
            longitude + ((Math.random() - 0.5) / 500),
            150 + ((Math.random() - 0.5) * 10) };
}

public void setupActionBarBackPressed() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setLogo(R.drawable.ic_launcher);
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setDisplayShowHomeEnabled(true);

    actionBar.setDisplayHomeAsUpEnabled(true); // BACK BUTTON ENABLED
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        // NavUtils.navigateUpFromSameTask(this);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
}

已编辑: 这就是我的数组,我在其中获取 AssociatedArray 中的值。

Log.d("map", "frenchise location array = " + AssociatedArray);
if (AssociatedArray != null) {

    if (AssociatedArray.size() > 0) {

        for (int a = 0; a < AssociatedArray.size(); a = a + 2) {

          Log.d("map", "frenchise location array = " + AssociatedArray);

        }

    }

【问题讨论】:

  • 请关注我编辑的帖子。
  • 我正在编辑代码,请按照我将值放入 ArrayList 的方式进行操作。
  • 我这样做,请参阅我的帖子编辑部分

标签: android google-maps google-maps-api-3


【解决方案1】:

将您的 MapActivity 替换为以下 Activity,希望它有效。

public class MapActivity extends ActionBarActivity {

// Google Map
private GoogleMap googleMap;
double stringLatitude;
double stringLongitude;

String frenchiseLocationArray;
String ServiceCentreLocationArray;

private ArrayList<String> AssociatedArray = new ArrayList<String>();
private ArrayList<String> AssociatedArrayServicesCentres = new ArrayList<String>();
private ArrayList<MapBean> mMapBean = new ArrayList<MapBean>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.googlemap);

    setupActionBarBackPressed();

    frenchiseLocationArray = getIntent().getExtras().getString(
            "frenchiseLocationArray");
    ServiceCentreLocationArray = getIntent().getExtras().getString(
            "ServiceCentreLocationArray");

    Toast.makeText(
            getApplicationContext(),
            "frenchise " + frenchiseLocationArray + "\n"
                    + " service centre " + ServiceCentreLocationArray,
            Toast.LENGTH_SHORT).show();

  ///////////////////////////////////////// for frenchise ///////////////////////////////////////
    // separate the strings by comma
    StringTokenizer st = new StringTokenizer(frenchiseLocationArray, ",");

    /* List myArray = new ArrayList<String>(); */
    String token = null;

    while (st.hasMoreTokens()) {

        token = st.nextToken();
        AssociatedArray.add(token);

    }

 ///////////////////////////// for frenchise End ///////////////////////////////////////

 ///////////////////////////// for ServicesCentre  ///////////////////////////////////////

    // separate the strings by comma
            StringTokenizer st1 = new StringTokenizer(ServiceCentreLocationArray, ",");

            /* List myArray = new ArrayList<String>(); */
            String token1 = null;

            while (st1.hasMoreTokens()) {

                token1 = st1.nextToken();
                AssociatedArrayServicesCentres.add(token1);

            }
 ///////////////////////////// for ServicesCentre End  ///////////////////////////////////////


    try {

        // check if GPS enabled
        GPSTracker gpsTracker = new GPSTracker(this);

        if (gpsTracker.canGetLocation()) {
            stringLatitude = Double.valueOf(gpsTracker.latitude);

            stringLongitude = Double.valueOf(gpsTracker.longitude);

        } else {
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            gpsTracker.showSettingsAlert();
        }
        // Loading map
        initilizeMap();


        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        // googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);

        // Showing / hiding your current location
        googleMap.setMyLocationEnabled(true);

        // Enable / Disable zooming controls
        googleMap.getUiSettings().setZoomControlsEnabled(false);

        // Enable / Disable my location button
        googleMap.getUiSettings().setMyLocationButtonEnabled(true);

        // Enable / Disable Compass icon
        googleMap.getUiSettings().setCompassEnabled(true);

        // Enable / Disable Rotate gesture
        googleMap.getUiSettings().setRotateGesturesEnabled(true);

        // Enable / Disable zooming functionality
        googleMap.getUiSettings().setZoomGesturesEnabled(true);

        /*
         * double latitude = 17.385044; double longitude = 78.486671;
         */
        double latitude = 0; // = stringLatitude;
        double longitude = 0;// = stringLongitude;
        double latitude1 = 0; // = stringLatitude;
        double longitude1 = 0;// = stringLongitude;

        for (int i = 2; i < AssociatedArrayServicesCentres.size(); i+=4) {
            int j = i;
            /*int j = i;
            latitude = AssociatedArray.get(i)+ "";
            longitude = AssociatedArray.get(j+1);*/
            String City = AssociatedArrayServicesCentres.get(j-2);
            String Address = AssociatedArrayServicesCentres.get(j-1);

            String latstr = AssociatedArrayServicesCentres.get(i);
            latitude1 = Double.parseDouble(latstr);
            String longstr = AssociatedArrayServicesCentres.get(j+1);
            longitude1 = Double.parseDouble(longstr);

            final LatLng ufone = new LatLng(latitude1, longitude1);
            Marker kolkata = googleMap.addMarker(new MarkerOptions()
                            .position(ufone)
                            .title(City)
                            .snippet(Address)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));

                    CameraPosition cameraPosition = new CameraPosition.Builder()
                            .target(new LatLng(latitude1, longitude1)).zoom(15).build();

                    googleMap.animateCamera(CameraUpdateFactory
                            .newCameraPosition(cameraPosition));
        }

        for (int i = 2; i < AssociatedArray.size(); i+=4) {
            int j = i;
            /*int j = i;
            latitude = AssociatedArray.get(i)+ "";
            longitude = AssociatedArray.get(j+1);*/
            String City = AssociatedArray.get(j-2);
            String Address = AssociatedArray.get(j-1);

            String latstr = AssociatedArray.get(i);
            latitude = Double.parseDouble(latstr);
            String longstr = AssociatedArray.get(j+1);
            longitude = Double.parseDouble(longstr);

            final LatLng ufone = new LatLng(latitude, longitude);
            Marker kolkata = googleMap.addMarker(new MarkerOptions()
                            .position(ufone)
                            .title(City)
                            .snippet(Address)
                            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));

                    CameraPosition cameraPosition = new CameraPosition.Builder()
                            .target(new LatLng(latitude, longitude)).zoom(15).build();

                    googleMap.animateCamera(CameraUpdateFactory
                            .newCameraPosition(cameraPosition));
        }






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

}

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

/**
 * function to load map If map is not created it will create it for you
 * */
private void initilizeMap() {
    if (googleMap == null) {
        googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                R.id.map)).getMap();

        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

/*
 * creating random postion around a location for testing purpose only
 */
private double[] createRandLocation(double latitude, double longitude) {

    return new double[] { latitude + ((Math.random() - 0.5) / 500),
            longitude + ((Math.random() - 0.5) / 500),
            150 + ((Math.random() - 0.5) * 10) };
}

public void setupActionBarBackPressed() {
    ActionBar actionBar = getSupportActionBar();
    actionBar.setLogo(R.drawable.ic_launcher);
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setDisplayShowHomeEnabled(true);

    actionBar.setDisplayHomeAsUpEnabled(true); // BACK BUTTON ENABLED
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        // NavUtils.navigateUpFromSameTask(this);
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
 }
}

【讨论】:

  • 这正是我想要的 Thaks :)
【解决方案2】:
for (int i = 0; i < result.size(); i++) {

                    MarkerOptions marker = new MarkerOptions().position(
                            new LatLng(result.get(i).getShopLat(), result
                                    .get(i).getShopLng())).title(
                            result.get(i).getShopName());
                    // Changing marker icon
                    marker.icon(BitmapDescriptorFactory
                            .fromResource(R.drawable.marker));

                    // adding marker
                    googleMap.addMarker(marker);

                }


                LatLng latLong = new LatLng(user.getUserLatitude(), user.getUserLogitude());

                CameraPosition cameraPosition = new CameraPosition.Builder()
                        .target(latLong).zoom(19f).tilt(70).build();
                googleMap.setMyLocationEnabled(true);
                googleMap.animateCamera(CameraUpdateFactory
                        .newCameraPosition(cameraPosition));

这里的 Result 是对象的数组列表,包括纬度和经度

【讨论】:

  • 亲爱的 Sishine,但我的第一个 lat long 索引是 2,3,然后是 6,7,然后是 10,11 ...我怎么能这样?
  • 使用对象地名创建类,经纬度设置每个值,然后创建该类的数组列表
【解决方案3】:

使用这个:

创建一个java类MapBean.java

像这样:

public class MapBean {
private String City;
private String Name;
private String Lat;
private String Long;

public MapBean(String City, String Name, String Lat, String Long) {
    this.City = City;
    this.Name = Name;
    this.Lat = Lat;
    this.Long = Long;
}

public String getCity() {
    return City;
}

public void setCity(String city) {
    City = city;
}

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getLat() {
    return Lat;
}

public void setLat(String lat) {
    Lat = lat;
}

public String getLong() {
    return Long;
}

public void setLong(String l) {
    Long = l;
}

}

像这样将值放入该 bean 中

private ArrayList<MapBean> mMapBean = new ArrayList<MapBean>();
mMapBean.add(new MapBean("city","name","21.22","22.33"); 
mMapBean.add(new MapBean("city","name","24.44","25.55");
//like this.....

那么就这样做吧:

for(int i =0;i<mMapBean.size();i++){

final LatLng name = new LatLng(mMapBean.get(i).getLat(), mMapBean.get(i).getLong());
Marker marker = googleMapForUser.addMarker(new MarkerOptions()
                .position(name)
                .title(name)
                .snippet(name + " is cool")
                .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.ic_launcher)));

        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(latitude, longitude)).zoom(15).build();

        googleMapForUser.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
}

已编辑: 就这样救吧。你说你能做到这一点。。 然后粘贴这个..

    String temp = "city,name,21.22,22.33/city,name,24.44,25.55/city,name,32.222,38.88";
    String city = "", name = "", lat = "", lon = "";
    for (String retval : temp.split("/")) {
        System.out.println(retval);
        System.out.println();
        int i = 0;
        city = "";
        name = "";
        lat = "";
        lon = "";
        for (String value : retval.split(",")) {
            if (i == 0) {
                city = value;
            }
            if (i == 1) {
                name = value;
            }
            if (i == 2) {
                lat = value;
            }
            if (i == 3) {
                lon = value;
            }

            System.out.println(city + " " + name + " " + lat + " " + lon);
            i++;
        }
        System.out.println(city + " " + name + " " + lat + " " + lon);
         mMapBean.add(new MapBean(city, name, lat, lon));
    }

}

【讨论】:

猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2011-09-11
  • 1970-01-01
  • 2019-06-11
  • 2021-09-12
相关资源
最近更新 更多