private Marker processJSONObject(JSONObject jo) {
    if (jo == null) throw new NullPointerException();

    if (!jo.has("geometry")) throw new NullPointerException();

    Marker ma = null;
    try {
      Double lat = null, lon = null;

      if (!jo.isNull("geometry")) {
        JSONObject geo = jo.getJSONObject("geometry");
        JSONArray coordinates = geo.getJSONArray("coordinates");
        lon = coordinates.getDouble(0);
        lat = coordinates.getDouble(1);
      }
      if (lat != null) {
        String user = jo.getString("id");

        ma = new IconMarker(user, lat, lon, 0, Color.RED, icon);
      }
      Log.i("point", lon + ", " + lat + ": " + ma.getName());
    } catch (Exception e) {
      e.printStackTrace();
    }
    return ma;
  }
  /** {@inheritDoc} */
  public boolean onTouch(View view, MotionEvent me) {
    // See if the motion event is on a Marker
    for (Marker marker : ARData.getMarkers()) {
      if (marker.handleClick(me.getX(), me.getY())) {
        if (me.getAction() == MotionEvent.ACTION_UP) markerTouched(marker);
        return true;
      }
    }

    return super.onTouchEvent(me);
  };