@Background public void updatePOIs(LatLng loc) { double lat = loc.latitude; double lon = loc.longitude; Log.d(TAG, "Camera center: Lat: " + lat + " Long: " + lon); ViewMapFragment frag = (ViewMapFragment) mMapFragment; List<OSMNode> NodesList = null; boolean fountain = false; boolean toilet = false; boolean rest = false; if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("show_fountain", true)) { fountain = true; } if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("show_toilet", true)) { toilet = true; } if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("show_rest", false)) { rest = true; } try { NodesList = OSMWrapperAPI.fetch(lon, lat, 0.005, fountain, toilet, rest); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } Iterator<OSMNode> geolistIterator; try { geolistIterator = NodesList.iterator(); } // If the list is empty... catch (NullPointerException e) { stopProgressbar(); return; } try { while (geolistIterator.hasNext()) { // Log.d(MapActivity.tag,"Adding GeoPoint"); OSMNode osmNode = geolistIterator.next(); Map<String, String> tag = osmNode.getTags(); // Remove duplicates // TODO: move this into a method boolean tapExists = false; boolean toiletExists = false; boolean foodExists = false; Iterator<OSMNode> tapItemIterator = allTapItem.iterator(); while (tapItemIterator.hasNext()) { OSMNode item = tapItemIterator.next(); if (item.getId().equals(osmNode.getId())) { tapExists = true; // Log.d(TAG, item.getId() + ": Node Exists"); } tapItemIterator.remove(); } Iterator<OSMNode> toiletItemIterator = allToiletItem.iterator(); while (toiletItemIterator.hasNext()) { OSMNode item = toiletItemIterator.next(); if (item.getId().equals(osmNode.getId())) { toiletExists = true; // Log.d(TAG, item.getId() + ": Node Exists"); } toiletItemIterator.remove(); } Iterator<OSMNode> foodItemIterator = allFoodItem.iterator(); while (foodItemIterator.hasNext()) { OSMNode item = foodItemIterator.next(); if (item.getId().equals(osmNode.getId())) { foodExists = true; // Log.d(TAG, item.getId() + ": Node Exists"); } foodItemIterator.remove(); } if (tag.containsValue("drinking_water") && !tapExists) { allTapItem.add(osmNode); } else if (tag.containsValue("toilets") && !toiletExists) { allToiletItem.add(osmNode); } else if ((tag.containsValue("fast_food") || tag.containsValue("cafe") || tag.containsValue("food_court") || tag.containsValue("restaurant")) && !foodExists) { allFoodItem.add(osmNode); } frag.addMarker(osmNode); geolistIterator.remove(); } Log.d( TAG, "Tap Overlay Size: " + allTapItem.size() + "\nToilet Overlay Size: " + allToiletItem.size() + "\nFood Overlay Size: " + allFoodItem.size()); } catch (ConcurrentModificationException e) { Log.e(TAG, "ConcurrentModificationException has occured " + e.getStackTrace()); } stopProgressbar(); }