Exemplo n.º 1
0
  @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();
  }