2

我想实现这样的事情:

我有什么我 有 JSON 数据latlng值,我已经把所有这些都放进去Hashmap,我已经完成了它并且它的工作

我需要什么我 如何将这些存储latlng值放入带有更多标记的 Google 地图中?

我有这段代码用于解析 JSON 数据

    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
    JSONParser jParser = new JSONParser();
    JSONArray json = jParser.getJSONFromUrl(url);
    try {
           for(int i = 0; i < json.length(); i++){
                JSONObject c = json.getJSONObject(i);

                String lat = c.getString(TAG_LAT);
                String lng = c.getString(TAG_LNG);



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

            // adding each child node to HashMap key => value
            map.put(TAG_LAT, lat);
            map.put(TAG_LNG, lng);

            // adding HashList to ArrayList
            contactList.add(map);
           }
    } catch (JSONException e) {
        e.printStackTrace();
        Log.e("JSON Parser", "Error parsing data " + e.toString());

    }

问题

我不知道我应该从哪里开始,如何将超过 1 个标记放入 Google 地图?

        SupportMapFragment mapFrag=
                    (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
            initListNav();
            map=mapFrag.getMap();

            CameraUpdate center=
                    CameraUpdateFactory.newLatLng(latvalue, lngvalue);

            CameraUpdate zoom=CameraUpdateFactory.zoomTo(13);

            map.moveCamera(center);
            map.animateCamera(zoom);

            addMarker(map, latvalue , lngvalue);
4

2 回答 2

2

是否迭代数组才是问题所在,而不是你这样做的方式。

for (HashMap<String, String> hashMap : contactList) {
    map.addMarker(new MarkerOptions()
      .position(new LatLng(hashMap.get(TAG_LAT) , hashMap.get(TAG_LNG)))
      .title("Another marker"));
}

编辑:

    mMap = ((SupportMapFragment) 
    getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

    ArrayList<LatLng> contactList = new ArrayList<LatLng>();

    contactList.add(new LatLng(48.8742, 2.3470));
    contactList.add(new LatLng(0, 0));

    for (LatLng latLon : contactList) {
        mMap.addMarker(new MarkerOptions().position(latLon).title("Another marker"));
    }

编辑2:与哈希图相同

ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

//Paris
{
    // creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();

    // adding each child node to HashMap key => value
    map.put(TAG_LAT, "48.8742");
    map.put(TAG_LNG, "2.3470");

    // adding HashList to ArrayList
contactList.add(map);
}

//London
{
    // creating new HashMap
    HashMap<String, String> map = new HashMap<String, String>();

    // adding each child node to HashMap key => value
    map.put(TAG_LAT, "51.5171");
    map.put(TAG_LNG, "0.1062");

    // adding HashList to ArrayList
    contactList.add(map);
}

for (HashMap<String, String> hashMap : contactList) {
    mMap.addMarker(new MarkerOptions()
        .position(new LatLng(Double.parseDouble(hashMap.get(TAG_LAT)) ,        
            Double.parseDouble(hashMap.get(TAG_LNG))))
        .title("Another marker"));
}

编辑 3,如何在标记点击时获得回调:

mMap.setOnMarkerClickListener(new OnMarkerClickListener() {

    @Override
    public boolean onMarkerClick(Marker arg0) {
        Log.e("onMarkerClick", "test: "+arg0.getTitle());
        return false;
    }
});
于 2013-03-05T13:21:16.047 回答
-1

您应该使用 Google Maps API V2。在Google Maps API Demo V2中,您可以看到标记是如何添加到GoogleMap mMap.

    // Uses a custom icon.
mSydney = mMap.addMarker(new MarkerOptions()
        .position(SYDNEY)
        .title("Sydney")
        .snippet("Population: 4,627,300"));

在此示例SYDNEY中是一个LatLong点,标题和片段用于自定义信息窗口。只需查看您的 Hashmap 并将每个标记添加到地图中。您不一定需要将每个标记分配给一个Marker变量(就像他们在示例中所做的那样mSydney)。

于 2013-03-05T13:12:54.110 回答